おっさんのUnity入門 2Dオブジェクトで敵を量産する(プレファブの使い方)
敵オブジェクトを量産する仕組みを実装していきます。
【追加するオブジェクト】
- GameController
- EnemyGenerater.cs
【RED_ENEMYのプレファブ化】
RED_ENEMYを任意の場所(この場合Prefabs)へドロップします。
【GameControllerの追加】
ゲーム全体をコントロールするためのオブジェクトを追加します。
GameControllerに敵を自動的に生成するためのスクリプトEnemyGenerator.csを追加します。
【EnemyGenerator.cs】
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyGenerator : MonoBehaviour { // 敵オブジェクト(プレファブ)の入れ物 // 敵オブジェクトはInspectorで指定する [SerializeField] private GameObject enemyObj; // プレイヤーオブジェクトの入れ物 private GameObject playerObj; void Start () { // プレイヤーオブジェクトを取得 playerObj = GameObject.Find ("PLAYER_GREEN"); // プレイヤーからx軸方向に5、y軸方向に2移動した位置に // 敵を出現させる Instantiate (enemyObj, playerObj.transform.position + new Vector3 (5, 2, 0), transform.rotation); } }
【量産に使用するプレファブを指定】
先ほどプレファブ化したRED_ENEMYを指定します。
Sceneに配置していない敵オブジェクトが登場しました。
【不要となった敵オブジェクトをSceneから削除する】
【動作確認】
プレファブから生成された敵オブジェクトのみが出現するようになりました。
今度は一定時間毎に敵が生成されるように修正します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyGenerator : MonoBehaviour { // 敵オブジェクト(プレファブ)の入れ物 // 敵オブジェクトはInspectorで指定する [SerializeField] private GameObject enemyObj; // プレイヤーオブジェクトの入れ物 private GameObject playerObj; // 敵を生成するまでの時間 float timer; // 敵を生成するまでの閾値 float instantiateInterval; // 敵の最大生成数 int maxInstanceValue; void Start () { timer = 3; instantiateInterval = 3; maxInstanceValue = 10; // プレイヤーオブジェクトを取得 playerObj = GameObject.Find ("PLAYER_GREEN"); } void Update () { // 敵オブジェクトの生成関数を呼び出す GenerateEnemy (); } // 敵オブジェクトの生成関数 void GenerateEnemy () { // カウンタ timer -= Time.deltaTime; if (timer < 0) { if (maxInstanceValue > 0) { // プレイヤーからx軸方向に10、y軸方向に1移動した位置に // 敵を出現させる Instantiate (enemyObj, playerObj.transform.position + new Vector3 (10, 1, 0), transform.rotation); // 最大出現数を減らす maxInstanceValue--; // タイマーのリセット timer = 3; } } } }
【動作確認】
一定間隔かつ一定距離で敵が量産されるようになりました。