今回は敵(Cube)が自分の方へ向かって来るのでそれを倒すゲームを作ってみたいと思います
↓な感じです(ちょっとマウスポインターが邪魔ですね。すみません... )
前提
こちらの記事 の環境構築が済んでいること
(やらなくても実装はできますが、Instant Previewの設定 と Unityエディタ上でシミュレート も合わせてご覧いただけたらと思います)
Cubeオブジェクトを敵オブジェクト化する
環境構築時に動作確認用に置いたCubeオブジェクトを敵オブジェクトとして扱うようにします
- Hierarchy のCubeオブジェクトを Projectビュー にドラッグ&ドロップしプレハブ化する
- プレハブ化されたCubeオブジェクトの名前を
Enemy
に変更 - Hierarchy のCubeオブジェクトを削除
動的に敵オブジェクトを配置
- 動的に敵オブジェクトを作成するために、まずは空のオブジェクトを作成
-
作成したオブジェクトに
EnemyCreator
と名前をつける -
Add Componentでスクリプト
EnemyCreator
を追加 -
Inspector上で敵オブジェクトと敵生成時間を設定出来るようにする
EnemyCreatorpublic class EnemyCreator : MonoBehaviour { // 動的に生成する敵 public GameObject enemy; // 生成するまでのインターバル public float interval = 3; }
-
インターバル毎にランダムで敵を配置するコードを作成
EnemyCreator// 時間経過をカウント private float time; void Update () { time += Time.deltaTime; if (time >= interval) { time = 0; GameObject newEnemy = Instantiate (enemy); newEnemy.transform.position = new Vector3 ( Random.Range(-10.0f, 10.0f), Random.Range(0.0f, 3.0f), Random.Range(-10.0f, 10.0f)); } }
-
Inspector上でEnemyCreatorスクリプトのEnemy変数に、
Enmyプレハブ
をドラッグ&ドロップし設定
これで敵オブジェクトのランダム配置は完了です!実行し、以下のようランダムでオブジェクトが生成されればOKです!
敵オブジェクトをコントローラーのクリックで倒す
-
Enemyプレハブ
にAdd ComponentでEnemy
スクリプトを追加 -
コントローラーでクリックされた時に消滅する用のコードを作成
Enemypublic void Deth() { Destroy (this.gameObject); }
-
Enemyプレハブ
にAdd ComponentでEvent Trigger
を追加 -
Add New Event Type > PointerClick を選択しクリック時にイベントを発行するよう設定
-
イベントに反応するオブジェクトとして
Enemyプレハブ
を設定 -
No Function > Enemy > Deth () を設定しクリック時に呼ばれるメソッドを指定
これで敵オブジェクトをクリックすると消えるようになりました!
こんな感じで動作していればOKです!
敵を自分の方に向かって来させる
その場に止まっているだけだと面白くないので、自分の方に寄って来るようにしたいと思います
-
Enemyスクリプトに敵の移動スピードと自分と敵が衝突するまでの距離を設定する変数を作成
Enemy// 敵スピード public float speed = 1f; // 自分と敵が衝突するまでの距離 public float stoppingDistance = 2f;
-
続けて敵が向かって来るコードを作成
Enemyvoid FixedUpdate() { // 自分の位置へ移動させる Vector3 moveDirection = Camera.main.transform.position; this.transform.LookAt (moveDirection); moveDirection = moveDirection - transform.position; if (moveDirection.magnitude > stoppingDistance) { moveDirection = moveDirection.normalized * speed; transform.Translate (moveDirection * Time.deltaTime, Space.World); } else { // TODO 自分と衝突した } }
これで敵が向かって来るようになりました!
自分と衝突すると敵は止まるようになっています
これで完成です!
なんとなくゲームっぽくなったかと思います!
おまけ
このまま実機で実行してもアプリを終了することができません
アプリを終了するためには こちらの記事 をご覧ください
最後に
まだまだゲームとして完成させるところは多くあるかと思います
例えば敵との当たり判定やスコア表示、音などの要素を盛り込めばもっと面白くなるはずです!
Daydreamは面白いので、もっとたくさん対応端末が出てくれたらなーと思います