#8 敵機を作る(2)

2Dシューティング
このブログは、趣味でプログラミングを勉強中の筆者が、実験を繰り返しながら、WordPressの使い方の練習も兼ねて、備忘録のように記事を残していくものです。Unityのバージョンは6000.0.32f1です。

衝突判定をする

敵が出現したのはいいのですが、いくら弾を当てても素通りしてしまいます。これではゲームになりません。敵に弾が当たったら消えるようにしましょう。

今回のゴール

敵に衝突判定を付ける

まず、Enemyにコライダを付けます。コライダというのは他のコライダと接触したり重なったりした場合に検知してくれるセンサの働きをしてくれるコンポーネントです。Enemyのプレハブを選択した状態で、メニューからコンポーネント2D物理2Dポリゴンコライダーを選びます。同じようにBulletのプレハブにもコライダを取り付けます。こちらはメニューからコンポーネント2D物理2Dボックスコライダーを選びます。

2Dボックスコライダや2Dサークルコライダの方が衝突判定にかかる計算の負荷が低いのですが、Enemyは三角形なので2Dポリゴンコライダを使いました。

次に、スクリプトにメソッドを追加します。

OnTriggerEnter2Dは、ゲームオブジェクトに付いているコライダが何かに反応したら呼ばれる(実行される)メソッドです。引数のCollider2D型の変数には、反応したコライダ(ぶつかってきた相手)の情報が入ってきます。ぶつかってきた相手を知りたい場合に使います。

今回は、何かに当たったら自分を消すという処理を入れました。これで、弾が当たったら敵が消えるはずです。実行してみましょう。

敵に当たった弾が弾かれて方向がそれていきました。コライダの設定が間違っていたようです。2Dコライダのトリガーにするの設定にチェックを入れ忘れていました。

EnemyBulletどちらのコライダもトリガーにしておきます。トリガーというのは、衝突したときに物理的な影響は与えないけれど、衝突したことは検知できるようにする仕組みのことです。チェックを入れないと物理的に影響を与えるため、さっきのように衝突したときに弾かれたりします。今度はどうでしょうか。

無事に消えてくれました。ただ、敵を消した後も、弾が貫通して飛び続けているのが気になります。敵に当たったら、弾も消えるようにしましょう。EnemyにつけたメソッドをBulletにも加えます。

画面から消えた敵を消す

弾に当たって消えた敵はいいんですが、撃ち漏らした敵は画面下に消えても永遠に下に移動し続けます。これも、弾と同じく画面から見えなくなったタイミングで消えてもらいましょう。Updateメソッドに以下の処理を書き加えます。

ここまでのコードを確認します。

Enemy.cs
Bullet.cs

今回はここまでです。お疲れ様でした。

コメント

タイトルとURLをコピーしました