前回までの作業で敵キャラが一通り動くようになりました。次はこの敵が続々と現れるようにするために、敵を一定間隔で出現させるようなゲームオブジェクトを作ってみましょう。
敵を一定間隔で出現させるゲームオブジェクトのC#スクリプト
では早速ですが敵を一定間隔で出現させるためのC#スクリプトを書いていきます。新しいC#スクリプトを作り、名前を「EnemySpawner」に変更したら次のコードを書いてください。
using System.Collections;
using UnityEngine;
public class EnemySpawner : MonoBehaviour
{
[SerializeField]
GameObject[] enemyPrefabs = { };
[SerializeField]
Transform target = null;
[SerializeField]
int maxSpawnCount = 50;
[SerializeField, Min(0)]
float spawnDelay = 0;
[SerializeField, Min(0)]
float spawnInterval = 3;
[SerializeField]
bool spawnOnStart = false;
Transform thisTransform;
WaitForSeconds spawnDelayWait;
WaitForSeconds spawnWait;
void Start()
{
thisTransform = transform;
spawnDelayWait = new WaitForSeconds(spawnDelay);
spawnWait = new WaitForSeconds(spawnInterval);
if (spawnOnStart)
{
StartSpawn();
}
}
public void StartSpawn()
{
StartCoroutine(nameof(SpawnTimer));
}
public void StopSpawn()
{
StopCoroutine(nameof(SpawnTimer));
}
IEnumerator SpawnTimer()
{
yield return spawnDelayWait;
for(int i = 0; i < maxSpawnCount; i++)
{
EnemyController enemy = Instantiate(enemyPrefabs[Random.Range(0, enemyPrefabs.Length)], thisTransform.position, Quaternion.identity).GetComponent<EnemyController>();
enemy.Target = target;
yield return spawnWait;
}
}
}
敵のC#スクリプトを少し変更する
ただし上のコードだと「enemy.Target」のところでエラーが出ると思います。まだEnemyController側でターゲットを外部から変更できるようになっていないためです。
そこでEnemyControllerスクリプトを開き、「Hp」プロパティの下あたりに次のように「Target」プロパティを追記してください。
// 省略
public int Hp
{
set
{
hp = Mathf.Clamp(value, 0, maxHp);
}
get
{
return hp;
}
}
// ★変更3
public Transform Target
{
set
{
target = value;
}
get
{
return target;
}
}
// 省略
これでターゲットを外部から変更できるようになりました。
もちろんゾンビごとにターゲットを指定しても良いのですが、面倒なのでここでは生成オブジェクト側でターゲットを一律で決めてしまうことにしました。
テストプレイして動作を確認しよう
さてここまでできたら、EnemySpawnerスクリプトを新しい空のゲームオブジェクトにアタッチし、配列「Enemy Prefabs」にゾンビのプレハブを登録しておきましょう。
「Spawn On Start」にチェックを入れて、テストプレイして敵が続々と出現するようになっていれば成功です。
次のページ→ゲームクリア&ゲームオーバー処理の作り方

