Проблема:
В spawnaPortale
у вас есть два while
цикла, например
float diffx = entrataX - uscitaX;
while(diffx < 0.3f || diffx > -0.3f)
{
uscitaX = Random.Range(-0.9f, 0.9f);
}
// ...
float diffy = entrataY - uscitaY;
while(diffy < 0.3f || diffy > -0.3f)
{
uscitaY = Random.Range(valori, this.transform.position.y);
}
, но внутри циклов вы никогда не обновляете значения diffx
и diffy
, поэтому они всегда будут иметь одно и то же значение , а именно те, которые были у них до входа в циклы ... так что одна из двух while
условий будет true
оно всегда останется true
=> вы навсегда замкнуты в петле.
Исправлено:
Обновитезначения внутри while
циклов
float diffx = entrataX - uscitaX;
while(diffx < 0.3f || diffx > -0.3f)
{
uscitaX = Random.Range(-0.9f, 0.9f);
diffx = entrataX - uscitaX;
}
// ...
float diffy = entrataY - uscitaY;
while(diffy < 0.3f || diffy > -0.3f)
{
uscitaY = Random.Range(valori, this.transform.position.y);
diffy = entrataY - uscitaY;
}
Подсказка
, если для diffx
и diffy
используется Math.Abs вместо
float diffx = Mathf.Abs(entrataX - uscitaX);
ваши while
условия становятся более сложными для интерпретации:
while(diffx < 0.3f)
{
...
}
Также обратите внимание:
Никогда не используйте ==
для прямого сравнения двух значений с плавающей запятой!
Из-за точности с плавающей запятой два значения с плавающей запятой в большинстве случаев не равны
, поэтому вашиwhile
состояние в Start
будет, вероятно, never be true
!
Неточность с плавающей запятой делает сравнение чисел с плавающей запятой неточным.Например, (1.0 == 10.0 / 10.0) может не возвращать true каждый раз.
В первом случае использование ==
нормально, так как вы сначала анализируете int
.Но при сравнении значений float
всегда используйте Mathf.Approximately like
if(Mathf.Approximately(RandxV , RandX))
Approximately () сравнивает два числа с плавающей запятой и возвращает true, если они находятся в пределах небольшого значения (Epsilon)друг друга.
Или, по крайней мере, определите диапазон, в пределах которого вы считаете два значения равными, например
if(Math.Abs(RandxV - RandX) < 0.0001f)