简体   繁体   English

Unity3D C#:Spawner继续实例化的次数超过了分配的值

[英]Unity3D C#: Spawner keeps instantiating more than assigned values

In my spawner code I'm trying to assign the instantiating limit to each wave by making it customizable. 在我的生成器代码中,我试图通过使其可定制来为每个wave分配实例化限制。

The first wave is correct but 2nd wave gets one more spawned object than assigned and it doesn't follow the rateOfSpawn 第一个波浪是正确的,但是第二个波浪得到的派生对象比分配的多,并且它不遵循rateOfSpawn

Maybe its not updating its values from wave ? 也许它没有从wave更新其值?

Thank you. 谢谢。

public Wave[] waves;
[HideInInspector]
public int waveIndex = 0;
private int totalObjectsInWave;
[HideInInspector]
public int destroyedObjectsInWave;

private void OnEnable()
{
    StartCoroutine(SpawnObjects());
}

IEnumerator SpawnObjects()
{
    yield return new WaitForSeconds(waitStartTime);

    Wave wave = waves[waveIndex];

    while (allowSpawning)
    {
        for (int w = 0; w < waves.Length; w++)
        {
            GetComponent<Gravity>().velocityOfInfluence = wave.speedOfEnemy;

            totalObjectsInWave = 0;
            totalObjectsInWave = wave.amountOfTiny + wave.amountOfSmall + wave.amountOfLarge;

            for (int t = 0; t < wave.amountOfTiny; t++)
            {
                SpawnTiny(); // Instantiates

                yield return new WaitForSeconds(1 / wave.rateOfSpawn);
            }

            for (int s = 0; s < wave.amountOfSmall; s++)
            {
                SpawnSmall(); // Instantiates

                yield return new WaitForSeconds(1 / wave.rateOfSpawn);
            }

            for (int l = 0; l < wave.amountOfLarge; l++)
            {
                SpawnLarge(); // Instantiates

                yield return new WaitForSeconds(1 / wave.rateOfSpawn);
            }

            yield return new WaitUntil(() => destroyedObjectsInWave == totalObjectsInWave);
            {
                waveIndex++;

                yield return new WaitForSeconds(timeBetweenWaves);
            }
        }
    }
}

[System.Serializable]
public class Wave
{
public float rateOfSpawn;
public float speedOfEnemy;

public int amountOfTiny;
public int amountOfSmall;
public int amountOfLarge;
}
 Wave wave = waves[waveIndex]; while (allowSpawning) { ... } 

You never break out of this loop in order to get a different Wave . 您永远不会为了获得不同的Wave跳出这个循环。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM