はじめに
前回はミサイルを追加して飛ばしてみるところまでを説明しました。しかし、自機から発射されているわけではないため、決まった位置から1回しか発射されません。今回は、自機からミサイルが発射されるようにします。
過去記事は以下の通りです。
- [Unity 2D] Unityのインストールと2Dプロジェクトの作成
- [Unity 2D] Unityエディタの理解
- [Unity 2D] スプライトを登録する
- [Unity 2D] カメラの設定
- [Unity 2D]キャラクターの追加とRigidbody 2Dの追加
- [Unity 2D]キャラクターのキーボードによる移動
- [Unity 2D]ミサイルを発射してみる(1)
シーンのミサイルを削除する
ゲームの開始時点からミサイルが表示されているのは変ですね。通常は必要なタイミングで、ミサイルをシーンに登場させる必要があります。
よってミサイルをシーンから一旦削除します。
ミサイルはすでにプレハブ(テンプレート)化してありますので、これをコードから複製して使用します。
HierarchyビューでPlayerMissileを右クリックして「Delete」を選択します。
コルーチンを作成する
Updateメソッドは、毎フレーム呼び出されるメソッドなので、主な処理はここに記述します。しかし、時間の掛かる処理をUpdateメソッド内に記述してしまうと、その処理が終了するまでゲームは待機することになってしまいます。
これを避けるために、特定の処理が終了するまで待機できるコルーチンを作成して処理します。
コルーチンは、以下の様な書式のメソッドです。
IEnumerator メソッド名() { for または while { なんらかの処理 yield return 戻り値; } }
自機のスクリプト(heli.cs)を以下の様に編集します。ここではFireメソッドをコルーチンとして作成し、Updateメソッドから呼び出しています。Fireメソッド内ではfor文で3回繰り返していますので、3発のミサイルが発射されることになります。
ちなみに、コルーチンは[f]キーが押されたときに実行する様にしています。コルーチンの実行はStartCorutineメソッドで行います。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Heli : MonoBehaviour { public float speed = 100.0F; // 移動早さ //ミサイルのプレハブ格納用 public GameObject missile; //★ 追加 // ★ Startメソッドをコルーチン化 void Start () { } IEnumerator Fire() { Debug.Log("発射"); for (int i = 0; i < 3; i++) { // ミサイルを自機と同じ位置と角度で作成する Instantiate(missile, transform.position, transform.rotation); // 0.05秒待つ yield return new WaitForSeconds(0.05f); } } // Update is called once per frame void Update () { //Debug.Log("Inputed"); // 矢印キーの入力情報を取得 var h = Input.GetAxis("Horizontal"); var v = Input.GetAxis("Vertical"); // 移動する向きを作成する Vector2 direction = new Vector2(h, v).normalized; if (Input.GetKeyDown("f")) { IEnumerator coroutine = Fire(); StartCoroutine(coroutine); Debug.Log("Fire"); } // 移動する向きとスピードを代入 GetComponent().velocity = direction * speed; } }
さて、スクリプト内ではプレハブを格納できるようにGameObject型の変数missileを定義しています。これにより、Hierarchyで自機(heli)を選択してInspectorビューのHeli(Script)を確認すると、missile欄ができていることがわかります。
この時点ではNone(Game Object)となっており、自機にはミサイルが関連付いていません。
ProjectビューでPrefabsフォルダを選択し、プレハブ化したPlayerMissileをHeli(Script)のMissileにドラッグ&ドロップします。
以上で作成完了です。
コメント