i-school - 【2D】プレイヤーの向いている方向に弾を発射する機能
 2Dトップビューゲーム(ファミコン版ゼルダの伝説、聖剣伝説、ヴァンパイアサバイバーなど)での実装例です。

 一定時間ごとに弾を生成し、プレイヤーの進行方向に向けて弾を発射する機能を作成します。

 今回の実装では弾側ではなく、相手側で当たり判定を作成する前提で設計しています。
例えば、敵や障害物用のクラスに当たり判定用のメソッド(OnTriggerEnter2D や OnCollisionEnter2D)を用意する設計です。



PlayerController


 事前の準備としてプレイヤーの制御クラスを作成しておきます。
こちらはサンプルですので、自分のプロジェクトに応じて利用してください。

 プレイヤーの進行方向の情報が取得できるようになっていれば問題ありません。


PlayerController.cs

<= クリックすると開きます




Bullet

 弾のプレハブにアタッチする制御クラスです。
プレイヤーの進行方向の情報をメソッドの引数で受け取り、その情報を利用することで弾の進行方向をプレイヤーの進行方向と同期させます。


Bullet.cs

<= クリックすると開きます


 弾のプレハブは事前に制作しておきましょう。
Rigidbody2D コンポーネントと 2D 用のコライダー(形状は画像に応じて変える)をアタッチしておいてください。

 下記はサンプルです。




BulletGenerator


 一定時間おきに弾を生成するジェネレータークラスを作成します。


BulletGenerator.cs

<= クリックすると開きます


 ヒエラルキーに Create Empty で新しいゲームオブジェクトを作成し、アタッチして利用してください。


インスペクター画像



ゲームを実行して動作確認する


 ゲームを実行し、一定時間おきに弾が生成されることを確認してください。
また、弾が発射させる方向がプレイヤーの進行方向と同期していることも確認してください。


<弾の弾先をプレイヤーの進行方向に合わせるケース>


 弾が丸状でなく、例えば弾先があるもの、矢じりがあるものなどの場合には、弾の進行方向だけではなく、
弾の弾先もプレイヤーの進行方向に合わせる必要があります。


サンプルアセット
Warped Shooting Fx





 そういったケースに対応した Bullet クラスのソースコードを提示します。


Bullet.cs

<= クリックすると開きます



インスペクター画像