Инструкция If выполняется снова после изменения условия на недопустимое.C # / Unity3D

#c# #unity3d

#c# #unity-&ame-en&ine

Вопрос:

У меня проблема с инструкцией if, которая выполняется еще 1 раз после того, как я меняю условие в конце на недопустимое. Мне нужно, чтобы это прекратилось после того, как я изменил условие, а не повторял цикл еще 1 раз. Вот код, посмотрите на if (Direction == «R») /// if (Direction == «S») имеет почти тот же код (изменения только в переменных / именах, которые я удалил из кода, чтобы было легко понять, с чем у меня проблема), и он работает нормально. Спасибо.

 void Update()
{
    
}
IEnumerator spawnTile()
{

    if (Direction == "S") 
    {   
        //Deleted code
    }

    if (Direction == "L") 
    {
        //Deleted code
    }

    if (Direction == "R")         //WHY THIS RUNS after Direction has been chan&ed to "S" ??
    {

        if (Rotated == "R")                              
        {
            UnityEn&ine.Debu&.Lo&("R");
            nextTileSpawn.x  = 6f;
            nextTileSpawn.z -= 6.5f;
            Instantiate(tileObj, nextTileSpawn, tileObj.rotation *= Quaternion.Euler(0, -90, 0));  
            nextTileSpawn.x  = 10;
            Rotated = "yes";
        }


        yield return new WaitForSeconds(1);


        if (nextTileSpawn.x &&t; startTurnR)                                          
        {
            startTurnR  = 500;
          
          System.Random random = new System.Random();
          randomz = random.Next((startTurnR - 450) / 10   1, (startTurnR - 10) / 10   1) * 10 -2.5f ;          

        }

        if (nextTileSpawn.x == randomz)
        {
            nextTurnTileSpawn.x = randomz;
            Instantiate(turnTileObj, nextTurnTileSpawn, turnTileObj.rotation);

                Rotated = "S";                        
                Direction = "S";
        }
        StartCoroutine(spawnTile());
 
    }
    
}`
  

Комментарии:

1. Чтобы запустить сопрограмму внутри сопрограммы, вам нужно: yield return StartCoroutine(spawnTile());

2. Я хотел вернуться к первой сопрограмме, а не запускать внутри нее другую, проблема в том, что после изменения направления на «S» оператор: if (Direction == «R») выполняется еще 1 раз, а затем переходит к if (Direction == «S») . После изменения направления я хочу, чтобы оно напрямую переходило к if (Direction == «S») .

Ответ №1:

вы можете использовать else, если хотите выполнить только 1 раз.

Комментарии:

1. Это сработало, спасибо, не уверен, почему выполняется еще 1 раз только с if

2. с помощью блока if всегда возвращается значение true или false. если у вас есть 5 блоков if, они всегда будут выполняться. Но если вы используете if-elseIf-else блок, то при выполнении одного условия другие условия выполняться не будут.