@Paj

При цикле while постоянно вылетает Unity. Как исправить?

когда я пытаюсь запустить цикл while Unity вылетает. Почему это происходит и как исправить637694c49ddaf626574406.png
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике
число float хранит двоичные дроби и конечное кол-во цифр.
например 1/3 в 10-чной записи это 0.3333333333 и так до бесконечности.
если мы запретим хранить бескочечное кол-во цифр (комп просто так не умеет), то 1/3 будет записана с погрешностью, т.к. в десятичной записи ее невозможно так отобразить
допустим мы говорим х = 1/3
давайте будем скдалывать х пока не получим 1
а мы никогда не получим 1
мы получим 0.9999999, которая не равна 1 и пойдем дальше
аналогично с двоичной системой исчисления, 1/5, 1/10 не возможно выразить за 23 цифры, а float хранит только 23 двоичные цифры (double - 53 цифры)
но даже если у тебя не будет арифметической погрешности, ловить точное равенство это так себе. обычно условие завершения цикла это знак больше или меньше, но не точное равенство.

ну и еще так по мелочи, я не проводил эксперимент как это на производительности сказывается, но вектор это 3 числа, а х - одно число. зачем прибавлять к вектору другой вектор, если вам достаточно к иксу добавить какую-то величину. может быть 0 прибавляется очень быстро, но даже если мы забудем про производительность, просто к иксу прибавлять число это же наверное код будет изящнее. хотя у вас читаемость кода так себе. что такое gr, что такое WH, совсем неясно. и название controll - это попытка в адекватные названия, но совсем не ясная. controll наверное относиться к управлению, но тут я не вижу никакого управления. подумайте что делает этот скрипт и вычеркните слово controll из своих мыслей. ааа это control 1. значит есть и control 2. это совсем нейминг от бога.

!!!!! обновил:
что кстати значит "вылетает"?
работа программы прекращается с отчетом об ошибке?
или просто останавливается, зависает на 0 fps
у тебя скорее всего второе. функция update вызывается на каждом кадре, если в в update делать бесконечный цикл, то программа остановится на этом бесконечном цикле, ошибки не будет просто игра встанет (наверное, я на такие ошибки не напарывался).
если в update поместить что-то громоздкое, то у тебя fps сильно просядет
общая рекомендация: тебе вряд ли в скриптах нужны циклы, в юнити есть свои циклы событий.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Ну вот твой position.x равен 5. Когда он достигнет 3 и цикл завершиться, чтобы юнити продолжил работу?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы