C#Unity。当值为2

问题描述 投票:-1回答:2
时,控制变量导致循环

我有这段代码,当变量waveNumer等于1时,该代码可以正常工作,产生敌人和所有敌人,但是当2 Unity崩溃时。我猜想这正在进入堰式循环,但我无法弄清楚其发生的原因。

        int percentForWave=0;
        int percentForType=0;

        int TotalEnemies = (int)enemySpawnsThisRound;
        if (waveNumer == 1)
        {
            Debug.Log("Entro al wave 1");
            percentForWave = 20;
            percentForType = 20;
            startList = 0;

        }
        if (waveNumer == 2)
        {
            Debug.Log("Entro al wave 2");
            percentForWave = 70;
            percentForType = 70;
            startList = endList;

        }
        if (waveNumer == 3)
        {
            Debug.Log("Entro al wave 3");
            percentForWave = 10;
            percentForType = 10;
            startList = endList;
        }


        int enemiesThisWave = Decimal.ToInt32(Math.Round(TotalEnemies * ((decimal)percentForWave / 100), 1));
        int enemiesForType = Decimal.ToInt32(Math.Round(lenghtList * ((decimal)percentForType / 100), 1));


        endList = enemiesForType + startList;

        clonesASpawnear = new GameObject[enemiesThisWave];
        int i = 0;

        while ( i < clonesASpawnear.Length)
        {



            for (int j = startList; j == endList; j++)
            {
                Debug.Log("Numero j = " + j);
                if (clonesASpawnear[i] == null)
                {

                    clonesASpawnear[i] = Instantiate(enemyTypeList[j], spawnPoints[j].transform.position, Quaternion.Euler(0, 0, 0)) as GameObject;
                    clonesASpawnear[i].SetActive(true);//lo activo
                    clonesASpawnear[i].GetComponent<EnemyMovement_DCH>().player = Target;
                    aliveEnemies += 1;
                    clonesASpawnear[i].GetComponent<EnemyDamageHandler_DCH>().SpawnerEnemies = this;
                    i++;
                }



            }   

        }         

另外,如果程序崩溃后我能看到统一日志,那将很有用,但不知道如何执行。

c# unity3d
2个回答
2
投票

从这里我可以看到我在您的for循环的条件语句中看到了一个问题,请看这里您有

for (int j = startList; j == endList; j++)

在您的情况下,您只有一个单身是true。当j的值等于endList时,因为在您的for循环中j每次递增,您的条件仅适用于一次迭代,我猜这是您的第一次迭代。如果for循环不会迭代i的值,该值是外部while循环的控制变量,则永远不会增加hance,而while循环将进入无限状态,永不停止迭代,一切都会冻结并崩溃。

[我可以读到评论,j < englist会在j = 1时立即导致崩溃

我希望在崩溃时获得一些变量的值。

  • clonesASpawnear.Length
  • startList
  • endList
  • i

0
投票

我们最终以这种方式解决了这个问题。如果有人在相同的泡菜中,我会发布解决方案。

 while ( i < clonesASpawnear.Length)
    {


        if(j <= endList)
        {
            Debug.Log("Numero j = " + j);
            //se fija que ya no este en el escenario el que va en ese punto asi no superpone items
            if (clonesASpawnear[i] == null)
            {

                clonesASpawnear[i] = Instantiate(enemyTypeList[j], spawnPoints[j].transform.position, Quaternion.Euler(0, 0, 0)) as GameObject;
                clonesASpawnear[i].SetActive(true);//lo activo
                                                   //Aca le asigno el blanco que quiero que siga al spawnear
                clonesASpawnear[i].GetComponent<EnemyMovement_DCH>().player = Target;
                aliveEnemies += 1;
                //aca le asigno este spawner para que pueda afectar luego las variables cuando lo maten por ejemplo
                clonesASpawnear[i].GetComponent<EnemyDamageHandler_DCH>().SpawnerEnemies = this;

            }
            j++;
            i++;
        }
        else
        {
            j = startList;
        }







     Debug.Log("Numero i = " + i);

    }



}
© www.soinside.com 2019 - 2024. All rights reserved.