目次
- 目次
- 前回のチュートリアル
- はじめに
- 敵の配置
- 敵のプレハブ化
- 敵を制御するスクリプトの作成
- 敵の出現を管理するスクリプトの作成
- おまけ:敵の速さの調整
- おまけ:敵の出現間隔の調整
- 次のチュートリアル
- チュートリアル一覧
前回のチュートリアル
はじめに
前回は、プレイヤーが弾を発射するようにしました
今回は、敵を作成していきます
敵の配置
まず、敵をシーンに配置していきます
「space-shooter/ships」フォルダ内の「10」を、Hierarchy の欄にドラッグします
このままだと名前が分かりづらいため、
配置した「10」を選択して、名前を「Enemy1」に変更します
(後から敵の種類を増やすため、今回作成する敵の名前に「1」と付けています)
また、プレイヤー同様に、「Scale」の「X」と「Y」に「1.56」と入力します
これで、敵の配置が完了しました
敵のプレハブ化
次は敵をプレハブ化していきます
敵は、一定間隔で画面外からステージに出現するため、
プレハブ化して、ゲーム中にたくさん複製できるようにしておきます
Hierarchy の欄の「Enemy1」オブジェクトを
「Prefabs」フォルダにドラッグします
これで、敵のプレハブが作成できました
シーンに存在する「Enemy1」オブジェクトは不要になるため、
Hierarchy で「Enemy1」オブジェクトを選択して、Delete キーを押して
削除します
これで、敵のプレハブ化が完了しました
敵を制御するスクリプトの作成
次は、敵の移動を行うスクリプトを作成していきます
「Player」スクリプトを作成した時と同様の手順で、
「Enemy」スクリプトを作成します
そして、作成した「Enemy」スクリプトをコードエディタで開き、
下記のコードを記述します
using UnityEngine; // 敵の出現位置の種類 public enum RESPAWN_TYPE { UP, // 上 RIGHT, // 右 DOWN, // 下 LEFT, // 左 SIZEOF, // 敵の出現位置の数 } // 敵を制御するコンポーネント public class Enemy : MonoBehaviour { public Vector2 m_respawnPosInside; // 敵の出現位置(内側) public Vector2 m_respawnPosOutside; // 敵の出現位置(外側) public float m_speed; // 移動する速さ public int m_hpMax; // HP の最大値 public int m_exp; // この敵を倒した時に獲得できる経験値 public int m_damage; // この敵がプレイヤーに与えるダメージ private int m_hp; // HP private Vector3 m_direction; // 進行方向 // 敵が生成された時に呼び出される関数 private void Start() { // HP を初期化する m_hp = m_hpMax; } // 毎フレーム呼び出される関数 private void Update() { // まっすぐ移動する transform.localPosition += m_direction * m_speed; } // 敵が出現する時に初期化する関数 public void Init( RESPAWN_TYPE respawnType ) { var pos = Vector3.zero; // 指定された出現位置の種類に応じて、 // 出現位置と進行方向を決定する switch ( respawnType ) { // 出現位置が上の場合 case RESPAWN_TYPE.UP: pos.x = Random.Range( -m_respawnPosInside.x, m_respawnPosInside.x ); pos.y = m_respawnPosOutside.y; m_direction = Vector2.down; break; // 出現位置が右の場合 case RESPAWN_TYPE.RIGHT: pos.x = m_respawnPosOutside.x; pos.y = Random.Range( -m_respawnPosInside.y, m_respawnPosInside.y ); m_direction = Vector2.left; break; // 出現位置が下の場合 case RESPAWN_TYPE.DOWN: pos.x = Random.Range( -m_respawnPosInside.x, m_respawnPosInside.x ); pos.y = -m_respawnPosOutside.y; m_direction = Vector2.up; break; // 出現位置が左の場合 case RESPAWN_TYPE.LEFT: pos.x = -m_respawnPosOutside.x; pos.y = Random.Range( -m_respawnPosInside.y, m_respawnPosInside.y ); m_direction = Vector2.right; break; } // 位置を反映する transform.localPosition = pos; } }
これで、敵の移動を行うスクリプトの用意ができたので、
Unity エディタに戻り、「Enemy」スクリプトを
「Enemy1」プレハブにドラッグして設定します
「Enemy1」プレハブを選択して、Inspector の欄に
「Enemy」スクリプトが表示されていれば、正常に反映できています
さらに、「Enemy」スクリプトのパラメータを設定します
項目 | 値 | 補足 |
---|---|---|
Respawn Pos Inside | X: 4.8 Y: 3.5 | 敵の出現位置(内側) |
Respawn Pos Outside | X: 5.8 Y: 4.4 | 敵の出現位置(外側) |
Speed | 0.03 | 移動する速さ |
Hp Max | 1 | HP の最大値 |
Exp | 2 | この敵を倒した時に獲得できる経験値 |
Damage | 5 | この敵がプレイヤーに与えるダメージ |
これで、敵を制御するスクリプトの作成が完了しました
敵の出現を管理するスクリプトの作成
敵を作成することができたので、
一定時間ごとに敵を出現させるスクリプトを作成していきます
「Player」スクリプトを作成した時と同様の手順で、
「EnemyManager」スクリプトを作成します
そして、作成した「EnemyManager」スクリプトをコードエディタで開き、
下記のコードを記述します
using UnityEngine; // 敵の出現を制御するコンポーネント public class EnemyManager : MonoBehaviour { public Enemy[] m_enemyPrefabs; // 敵のプレハブを管理する配列 public float m_interval; // 出現間隔(秒) private float m_timer; // 出現タイミングを管理するタイマー // 毎フレーム呼び出される関数 private void Update() { // 出現タイミングを管理するタイマーを更新する m_timer += Time.deltaTime; // まだ敵が出現するタイミングではない場合、 // このフレームの処理はここで終える if ( m_timer < m_interval ) return; // 出現タイミングを管理するタイマーをリセットする m_timer = 0; // 出現する敵をランダムに決定する var enemyIndex = Random.Range( 0, m_enemyPrefabs.Length ); // 出現する敵のプレハブを配列から取得する var enemyPrefab = m_enemyPrefabs[ enemyIndex ]; // 敵のゲームオブジェクトを生成する var enemy = Instantiate( enemyPrefab ); // 敵を画面外のどの位置に出現させるかランダムに決定する var respawnType = ( RESPAWN_TYPE )Random.Range( 0, ( int )RESPAWN_TYPE.SIZEOF ); // 敵を初期化する enemy.Init( respawnType ); } }
これで、敵の出現を管理するスクリプトの用意ができたので、
Unity エディタに戻ります
Hierarchy の欄の「+>Create Empty」を選択して
新規のゲームオブジェクトを作成します
作成したゲームオブジェクトの名前に「EnemyManager」と入力します
そして、先ほど作成した「EnemyManager」スクリプトを、
今回作成した「EnemyManager」オブジェクトにドラッグします
「EnemyManager」オブジェクトを選択して、
Inspector の欄に「EnemyManager」スクリプトが表示されていれば
正しく設定ができています
続けて、「EnemyManager」スクリプトのパラメータを設定していきます
まず、「Enemy Prefabs」の入力欄に「1」と入力します
そして、左側の三角形をクリックして表示された「Element 0」の欄に、
「Enemy1」プレハブをドラッグして設定します
最後に「Interval」(出現間隔)に「0.5」と入力します
これで、Unity を再生すると、
0.5 秒毎に、画面外から敵が出現するようになったことが確認できます
おまけ:敵の速さの調整
「Enemy1」プレハブを選択して、
「Enemy」スクリプトの「Speed」(移動する速さ)を調整することで、
敵が移動する速さを調整することができます
興味があればパラメータを調整してみて頂ければと思います
おまけ:敵の出現間隔の調整
「EnemyManager」オブジェクトを選択して、
「EnemyManager」スクリプトの「Interval」(出現間隔)を調整することで、
敵の出現間隔を調整することができます
興味があればパラメータを調整してみて頂ければと思います
次回は、弾と敵の当たり判定を作成していきます