产生敌人

时间:2020-07-24 22:33:27

标签: c# unity3d

我有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;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

创建列表后,像这样一一添加点:

points.Add(point1);
points.Add(point2);
...

或类似这样:

points.AddRange(new Vector2[] { point1, point2... });

然后,您可以像这样通过索引列表来随机选择一个:

Vector2 randomPoint = points[Random.Range(0, points.Count)];