我正在开发一款游戏,在这款游戏中,我想要产生一波又一波的敌人。在每一波敌人中,我从不同的产卵点产卵。例如,我有6个产卵点,第一波敌人从第四个点产生,第二波从第一个点产生,依此类推。
我写了一个代码,让我产生一波又一波的敌人,但我的问题是,它会从第一波敌人的所有6个产卵点产生敌人的浪潮。
当我点击play时,我有来自6个产卵点的敌人波,而不是每个波的一个产卵点。
using UnityEngine;
using System.Collections;
public class Waves : MonoBehaviour
{
public GameObject Enemy = null;
public int hazardCount = 3;
public float spawnWait=0.5f;
public float startWait=1;
public float waveWait=4;
public Transform[] spawnPoints;
void Start ()
{
StartCoroutine(SpawnWaves ());
}
IEnumerator SpawnWaves ()
{
yield return new WaitForSeconds (startWait);
while (true)
{
for (int i = 0; i < hazardCount; i++)
{
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
Instantiate (Enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
yield return new WaitForSeconds (spawnWait);
}
yield return new WaitForSeconds (waveWait);
}
}
}发布于 2014-12-09 08:09:58
由于spawnPointIndex是在循环内部挑选的,因此它为wave中的每个危险挑选一个新的随机产生点。如果你想让它使用相同的产生点,那么在危险循环之外但在waves while(true)循环内选择spawnPointIndex:
IEnumerator SpawnWaves ()
{
yield return new WaitForSeconds (startWait);
while (true)
{
// Only pick a new spawn point once per wave
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
for (int i = 0; i < hazardCount; i++)
{
// here would pick a new spawn point for each new enemy
Instantiate (Enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
yield return new WaitForSeconds (spawnWait);
}
yield return new WaitForSeconds (waveWait);
}
}还要考虑从对象池中拉出敌人,而不是每次都实例化新的敌人。这样效率会高得多。请参阅http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling
https://stackoverflow.com/questions/27368815
复制相似问题