我有10个点,我想在2d区域上生成敌人。我该如何将这些对象放入列表中,然后随机选择一个以从中生成敌人?
我可以自己创建列表,但无法找到将点添加到列表中的方法。
更新
因此,我已经弄清了原来的问题并创建了随机生成,并添加了一个波状生成,该波生成在一定数量的单个敌人生成后从每个点生成敌人。
我设置了一个计时器,使该关卡只持续一定的时间,但是当计时器用完并且我停止协程时,一切都停止了,甚至是您发射的武器的子弹也停止了。有人在我的代码中看到此问题吗?
public class Spawn_Manager : MonoBehaviour
{
[SerializeField]
private GameObject _monsterPrefab;
[SerializeField]
private GameObject _enemyContainer;
public static bool _stopSpawn = false;
public GameObject[] SpawnPoints;
public GameObject randomPoint;
public GameObject WaveSpawn;
// Start is called before the first frame update
void Start()
{
SpawnPoints = GameObject.FindGameObjectsWithTag("Spawns");
StartCoroutine(SpawnRoutine());
}
// Update is called once per frame
void Update()
{
if (Timer.timeLeft <=0)
{
_stopSpawn = true;
}
}
IEnumerator SpawnRoutine()
{
while (_stopSpawn == false)
{
for (int i = 0; i < StageMode.NumberToSpawn; i++)
{
randomPoint = SpawnPoints[Random.Range(0, SpawnPoints.Count())];
GameObject newMonster = Instantiate(_monsterPrefab, randomPoint.transform.position, randomPoint.transform.rotation);
newMonster.transform.parent = _enemyContainer.transform.parent;
yield return new WaitForSeconds(StageMode.SpawnDelay);
if (i == StageMode.SpawnCounter)
{
for (int j = 0; j < StageMode.WavesToSpawn; j++)
{
for (int k = 0; k < SpawnPoints.Length; k++)
{
Instantiate(_monsterPrefab, SpawnPoints[k].transform.position, SpawnPoints[k].transform.rotation);
}
}
i = 0;
}
}
}
}
}
答案 0 :(得分:2)
创建列表后,像这样一一添加点:
points.Add(point1);
points.Add(point2);
...
或类似这样:
points.AddRange(new Vector2[] { point1, point2... });
然后,您可以像这样通过索引列表来随机选择一个:
Vector2 randomPoint = points[Random.Range(0, points.Count)];