devlog [naru design]

プログラミングやテクニカルな内容の覚え書き。

Unity3D:ゲーム制作-無限インベーダ(3/4)の続きです

Rigidbodyの設定

Colliderによる衝突判定はRigidbodyコンポーネントと組み合わせて使う必要があります。Colliderコンポーネントしか設定していない同士ではOnTriggerEnterイベントが発生しません。

MissileプレハブにRigidbodyコンポーネントを追加します。

AssetsのMissileを選択した状態で、メニューComponent-Physics-Rigidbodyを選択することでコンポーネントが追加されます。つづいてRigidbodyの設定を行います。

missileRigidbody

UseGravityのチェックを外します。Constraintsの全てにチェックを付けます(これは重力や衝突が自身の姿勢に影響しないようにするためです)。

コントローラーへの通知

現状ではインベーダが消えたことをコントローラは知ることが出来ません。インベーダのスクリプトを修正して、インベーダが消滅する際にコントローラに用意されたDestroyInvader()関数を呼び出すようにします。

6行目:コントローラ保存用
11行目:GameControllerに追加されているコンポーネント(GameController)を取得
21行目:消す際にGameControllerのDestroyInvader()を呼び出す

これで、インベーダが消える際にはコントローラへ消えることを通知できるようになり、コントローラが残りのインベーダの数を把握できるようになりました。

※オブジェクト指向的な考えでは、この方法は好ましくないかもしれません。InvaderがGameControllerが存在していることを知らないはずなので、GameControllerからInvaderへDelegateを設定するような方法の方が良いと思います。

ミサイルのスクリプト修正

もう一点、ミサイルがインベーダに当ったら消えるようにします。

23-26行目:衝突したら自身を消す

完成

左右矢印キーを押すと砲台が左右に動き、上矢印キーを押すとミサイルが発射されます。インベーダは3発のミサイルが当たると消えます。

Pocket

コメントを残す

Trackback URL: