#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 блок, то при выполнении одного условия другие условия выполняться не будут.