【Unity】敵機をPreFab化して大量生成する。
変更:
2022/01/25 変数名を"アッパーキャメル"から、すべて小文字に修正。
今回は、UnityのPreFab機能を使って敵機を生成し、大量に落下させます。
ここでは弾の発射Shot()関数で使った"Instantiate"を使うとともに、"コルーチン"という機能を使います。
Unityマニュアルより:
コルーチンとは、実行を停止して Unity へ制御を戻し、その次のフレームで停止したところから続行することができる関数です。
正直なところ私もよくわかっていませんが、時間指定して繰り返したい処理があるときに
・IEnumerator
・StartCoroutine 関数
・WaitForSeconds 関数
などを使えばよいようです。
Update関数内に処理を書き込んでも繰り返し処理は出来ますが、毎フレームごとに実行する必要のないものだと困ります。
敵機(Circle)をPreFab化すると"ヒエラルキー"上から消すことになります。
どこかから呼び出さねばなりません。
そのための受け皿として、"ヒエラルキー"上に"空のオブジェクト"を作成し、"GameController"と名前を付けました。
これにスクリプトを追加し、GameObjectとして敵機(Ciecle)を呼び出します。
GameController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GameController : MonoBehaviour
{
//追加
//敵機をGameObjectとして宣言する
public GameObject circleprefab; //変更// Start is called before the first frame update
void Start()
{
//追加
//GenerateCircle()を開始する
StartCoroutine("GenerateCircle");
}// Update is called once per frame
void Update()
{
}//追加
//敵機(Circle)を生成する
IEnumerator GenerateCircle()
{
while (true)
{
Instantiate(
circleprefab, //変更
//X軸方向はランダム、Y軸方向6.0f、Z軸方向0.0fに敵機を生成
new Vector3(Random.Range(-8.5f, 8.5f), 6.0f, 0.0f),
transform.rotation
);
//1秒ごとに実行する。
yield return new WaitForSeconds(1.0f);
}
}}
また、"CircletPreFab"には"BulletPreFab"を参考に、"Rigidbody 2D"、"Circle Collider 2D"を設定してください。
"Boundary"外に出ると、敵機(Ciecle)を消すようにします。
さらに、CircleController.cs→CirclePreFabController.cs
それに伴い、ファイル内も変更してください。
CirclePreFabController.cs
public class CirclePreFabController : MonoBehaviour
以下略
次回は、”衝突判定”を設定して、敵機を弾で撃ち落とす処理を予定しています。
では、また。