2020/11/09
というわけで、最近はJavaに絶賛苦戦中です。「classesフォルダに.java
ファイルを放り込む」「String
とstring
を打ち間違えていた上、コンパイルエラーをEclipseのせいにする」「ぬるぽ連発」等、目覚ましい功績を残しております。
Tomcatの設定も癖があり、初見ではかなり厳しい印象です。
今回の話題ですが、ここのところ自作しているゲームに関することをほとんど書いていなかったので、最近作ったものから「弓矢」を紹介します!
ゲームで登場する武器としてはかなりメジャーな方ではないでしょうか。近代的な世界観のゲームでは住にとって代わられることが多いですが、「剣と魔法のファンタジー」なゲームには大抵あります。
自分の場合、上のプレイヤーキャラクター(予定)の「シルリス」が使う武器として作ってみました。ゲーム的には魔法使いポジションでメイン武器も杖なのですが、「杖先端の魔法弾を殴り付ける」ような攻撃にしてしまったので、遠距離攻撃ができる武器がほしかったわけです。
開発当初はクロスボウの予定でしたが、クロスボウが連射できるのはおかしいこと、あまり機械的で複雑な武器はシルリスのキャラクター的に合わなかったので、オーソドックスな弓にしました。
そう考えると某狩りゲーの速射って意味わからないシステムだったりします。近年はボウガンから極太ビームを放っていたりするので、今更突っ込むのもヤボかもしれませんが・・・。
弓矢のモデリング作成
Blenderで弓と矢のモデリングを行います。
まあ、普通の弓と矢ですね。あまりゴテゴテ装飾してもキャラと合わない上、モデリング技術もないのでシンプルでいいです。
弓の曲面は一見厳しそうに見えますが、Blenderの頂点細分化(SubdivisionSurface
)を使うことで簡単に作れます。Cubeをベースとし、上のような形にコネコネした後、モディファイアを適用してみましょう。下部分はMirrorモディファイアで補います。
矢のエフェクト作成
上で紹介した矢のモデルを用いてエフェクトを作成しました。矢のモデルだけインスタンス化して飛ばしてもつまらないので、「矢っぽい」エフェクトもくっ付けて飛ばします。
少し派手で矢っぽくありませんが、このリアリティのなさがファンタジーっぽくでいいんですよ。むしろ派手なくらいのエフェクトを作ることで、他のひどい部分(モデリングやアニメーション)を隠すことができます。視覚効果って大切ですね。
パーティクルシステムでの作り方ですが、上のような刃の衝撃波っぽい画像を用意し、Stretched Billboard
を使用します。パラメータは以下のような感じ。
注意点として、Start Speed
が0になっているとパーティクルが表示されません。ゲームオブジェクト自体を移動させている場合、パーティクルのスピードを0にすることが多いので注意が必要です。見た目上ほとんど動かない程度にスピードを上げておきましょう。
生成時の向きにも注意します。Instantiate()
の第3引数で指定できる他、transform.forward
を変えることでも向きを変えられます。
矢を放つモーションの作成
上で紹介したキャラクター「シルリス」のモーションとして、弓を構えて矢を放つものを追加します。
どう見ても「矢を放つモーション」と「矢を生成して飛ばすタイミング」がずれている他、引き絞った際の弦も完全ノータッチですが、ゲームではよくあることなので気にしないようにしましょう。
・・・にしても、やけに連射力が高い気がします。
調べた結果、1回目の攻撃では単発ですが、2回目以降は1回につき2発発射されるようです。もちろん制作時は1回1発を想定していたのですが、何かよくわからない挙動になっております。
現在AnimatorController
上から「攻撃モーションの特定のタイミング」で生成しているため、連打した際に遷移が歪なことになっているかもしれません。ただ連射数が多いと使っていて楽しいので、このままでいこうと思います。
あとがき
そんなわけで、久しぶりに「ゲーム開発日記」っぽく弓矢について紹介してみました!
最近ゲーム開発のモチベーションも上がってきたので、やる気のあるうちにバリバリ作りたいですね!