
Unityで簡単なシューティングゲームを作る[6]
Step6:弾で敵を倒す
プレイヤーと敵の動きが設定できたので、今度は敵に弾が当たった時の処理を設定していく。
※このサイトのチュートリアルはとりあえず自力でゲームを作ってみることを目的としているため、プログラム言語に関する解説部分はかなり大雑把で意訳気味です。プログラム言語(C#)について正しく、詳しく学びたい方は、入門書やUnityの解説サイトなどをご参考にしていただけたらと思います。また、このサイトはコピープロテクトをかけているため、画面上からスクリプトのコピペができません。「スクリプトはこちら」というリンクからテキストファイルを表示して使ってください。面倒くさくてすみません。
当たり判定の範囲を設定
Unityにはオブジェクト同士がぶつかった時に衝突検知をしてくれる機能があるので、当たり判定の設定はコンポーネントを使って簡単にできる。まずシーンビューから「enemyPrefab」を選択し「Add Component」をクリックし「Pysics2D」の「Circle Collider2D」を選択する。
「enemyPrefab」のインスペクタを確認すると、「Circle Collider2D」が追加されている。
「enemyPrefab」をダブルクリックして開くと、緑色の枠線が表示される。これが当たり判定の部分となる。
同じように、シャボン弾の方にも当たり判定を設定する。同様にシーンビューから「bulletPrefab」を選択した状態で「Add Component」をクリックし「Pysics2D」の「Circle Collider2D」を選択する。
「bulletPrefab」のインスペクタを「Circle Collider2D」が追加されている。この中にある「Is Trigger」にチェックを入れる。ここにチェックを入れることにより、衝突時にオブジェクトがはね返らずに貫通する感じになる。
「bulletPrefab」をダブルクリックして開くと、こちらにも緑色の枠線が表示される。
これで敵とシャボン弾の両方に当たり範囲の設定ができた。
弾の重力を排除する
続いて、打ったシャボン弾が重力によって落ちてこないよう設定する。シーンビューで「bulletPrefab」を選択し「Add Component」から「Pysics2D」の「Rigidbody2D」を選択する。
「bulletPrefab」のインスペクタに「Rigidbody2D」が追加されるのでそこの「Body Type」を「Kinematic」にする。
スクリプトからコンポーネントを呼び出す
敵と弾に設定したコンポーネントをスクリプトの方から呼び出す。シーンビューから「BulletController」を開き、以下の赤字のスクリプトを追記する。スクリプトはこちらから。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletController : MonoBehaviour {
void Update () {
transform.Translate (0, 0.2f, 0);
if (transform.position.y > 5) {
Destroy (gameObject);
}
}
void OnTriggerEnter2D(Collider2D coll) {
Destroy (coll.gameObject);
Destroy (gameObject);
}
}
シーンビューで設定したOnTriggerEnter2D関数を呼び出し、Destroy関数で衝突したオブジェクトを消す処理をしている。
動作確認をする
ゲームビューに切り替え動作確認を行う。弾が当たった時に敵が消えれば成功。これだけでかなりゲームっぽくなった。
次回の「Step7:スコアを更新する」では、敵を倒すごとにスコアが更新されるように設定していく。
★チュートリアル一覧
2020.6.3投稿