C# Единство. Управляющая переменная вызывает l oop, когда значение равно 2 - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть этот код, когда переменная 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++;
                }



            }   

        }         

Также было бы полезно, если бы я мог видеть журнал единиц после сбоя программы, но не представлял, как это сделать.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Отсюда, что я вижу, я вижу проблему в вашем состоянии для оператора l oop, смотрите здесь, у вас есть

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

в вашем состоянии, только вы есть один, чтобы получить это true. когда значение j равно endList , поскольку в вашем для l oop j увеличивается каждая итерация, ваше условие будет истинным только для одной итерации, которую я угадать первую итерацию по вашему. И если for для l oop не будет перебирать значение i, которое является управляющей переменной внешнего, тогда как l oop никогда не будет увеличивать hance, в то время как l oop будет go до бесконечности. укажите, где он никогда не перестанет повторяться, все зависнет и cra sh.

, поскольку я могу прочитать в комментарии, что j < englist немедленно приводит к cra sh, когда j = 1

Я хотел бы иметь значение нескольких переменных во время создания cra sh.

  • clonesASpawnear.Length
  • startList
  • endList
  • i
0 голосов
/ 04 февраля 2020

Мы решили проблему таким образом. Я выкладываю решение на случай, если кто-то будет в том же рассоле.

 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);

    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...