ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【開発日記】弓矢のモデリングとエフェクトの作成

time 2017/05/28

というわけで、最近はJavaに絶賛苦戦中です。「classesフォルダに.javaファイルを放り込む」「Stringstringを打ち間違えていた上、コンパイルエラーをEclipseのせいにする」「ぬるぽ連発」等、目覚ましい功績を残しております。
Tomcatの設定も癖があり、初見ではかなり厳しい印象です。

今回の話題ですが、ここのところ自作しているゲームに関することをほとんど書いていなかったので、最近作ったものから「弓矢」を紹介します!
ゲームで登場する武器としてはかなりメジャーな方ではないでしょうか。近代的な世界観のゲームでは住にとって代わられることが多いですが、「剣と魔法のファンタジー」なゲームには大抵あります。

自分の場合、上のプレイヤーキャラクター(予定)の「シルリス」が使う武器として作ってみました。ゲーム的には魔法使いポジションでメイン武器も杖なのですが、「杖先端の魔法弾を殴り付ける」ような攻撃にしてしまったので、遠距離攻撃ができる武器がほしかったわけです。
開発当初はクロスボウの予定でしたが、クロスボウが連射できるのはおかしいこと、あまり機械的で複雑な武器はシルリスのキャラクター的に合わなかったので、オーソドックスな弓にしました。
そう考えると某狩りゲーの速射って意味わからないシステムだったりします。近年はボウガンから極太ビームを放っていたりするので、今更突っ込むのもヤボかもしれませんが・・・。

弓矢のモデリング作成

Blenderで弓と矢のモデリングを行います。

まあ、普通の弓と矢ですね。あまりゴテゴテ装飾してもキャラと合わない上、モデリング技術もないのでシンプルでいいです。

弓の曲面は一見厳しそうに見えますが、Blenderの頂点細分化(SubdivisionSurface)を使うことで簡単に作れます。Cubeをベースとし、上のような形にコネコネした後、モディファイアを適用してみましょう。下部分はMirrorモディファイアで補います。

Mirrorモディファイアと併用する場合、頂点細分化のような「頂点数が変わるもの」は、Mirrorモディファイアの下に移動させます。この順序が逆になっていると、モディファイアの効果が期待しないものになる場合があります。

矢のエフェクト作成

上で紹介した矢のモデルを用いてエフェクトを作成しました。矢のモデルだけインスタンス化して飛ばしてもつまらないので、「矢っぽい」エフェクトもくっ付けて飛ばします。

少し派手で矢っぽくありませんが、このリアリティのなさがファンタジーっぽくでいいんですよ。むしろ派手なくらいのエフェクトを作ることで、他のひどい部分(モデリングやアニメーション)を隠すことができます。視覚効果って大切ですね。

パーティクルシステムでの作り方ですが、上のような刃の衝撃波っぽい画像を用意し、Stretched Billboardを使用します。パラメータは以下のような感じ。

注意点として、Start Speedが0になっているとパーティクルが表示されません。ゲームオブジェクト自体を移動させている場合、パーティクルのスピードを0にすることが多いので注意が必要です。見た目上ほとんど動かない程度にスピードを上げておきましょう。
生成時の向きにも注意します。Instantiate()の第3引数で指定できる他、transform.forwardを変えることでも向きを変えられます。

矢を放つモーションの作成

上で紹介したキャラクター「シルリス」のモーションとして、弓を構えて矢を放つものを追加します。

どう見ても「矢を放つモーション」と「矢を生成して飛ばすタイミング」がずれている他、引き絞った際の弦も完全ノータッチですが、ゲームではよくあることなので気にしないようにしましょう。

・・・にしても、やけに連射力が高い気がします。
調べた結果、1回目の攻撃では単発ですが、2回目以降は1回につき2発発射されるようです。もちろん制作時は1回1発を想定していたのですが、何かよくわからない挙動になっております。
現在AnimatorController上から「攻撃モーションの特定のタイミング」で生成しているため、連打した際に遷移が歪なことになっているかもしれません。ただ連射数が多いと使っていて楽しいので、このままでいこうと思います。

あとがき

そんなわけで、久しぶりに「ゲーム開発日記」っぽく弓矢について紹介してみました!
最近ゲーム開発のモチベーションも上がってきたので、やる気のあるうちにバリバリ作りたいですね!

down

コメントする