2017-01-02 4 views
1

Я занимаюсь симуляцией машинного обучения в Unity, и мне просто нужно некоторое подтверждение моей логики. Все физические события происходят в FixedUpdate(), и поэтому из того, что я понимаю, колебания в частоте кадров не будут влиять на мои результаты, так как будет выполняться правильный цикл физических вызовов каждого цикла (я устанавливаю шкалу времени смехотворно высоко). Это применимо, когда частота кадров действительно низкая, скажем, 1-5 кадров в секунду? Могу ли я гарантировать, что правильное количество шагов физики будет вызвано до тех пор, пока я могу поддерживать частоту кадров 1 или выше?Запуск моделирования Unity с очень низкими кадрами

Благодаря

ответ

1

Вам даже не нужно иметь фреймрейт 1 для того, чтобы работать. Цикл физики и контур отображения (FixedUpdate() vs Update()) не зависят друг от друга. Даже если у вас меньше кадров в 1 FPS, ваши физические обновления должны все же применяться правильно, они просто сделают несколько шагов физики, чтобы «догнать», прежде чем он отобразит следующий кадр отображения. См. this article from the unity documentation для получения дополнительной информации о заказе.

image

+0

Итак, я никогда не «потеряю» шаги физики? Например, если временная шкала установлена ​​настолько высоко, что производительность моего компьютера становится фактором, то есть время, выделенное для этапа физики, недостаточно для выполнения всех вычислений? – Amposter

+0

До тех пор, пока вы не измените положение «RigidBody» вне цикла обновления физики, вы никогда не потеряете «физические рамки». Если вы измените положение игрового объекта с помощью «RigidBody», вы можете получить неправильные вычисления физики. Либо увеличьте значение «Максимально допустимое время» в «Менеджере времени» (https://docs.unity3d.com/Manual/class-TimeManager.html), чтобы дать физике больше времени, чтобы догнать или переписать код, так что только когда-либо переместите объект «RigidBody» во время кадра обновления ... –

+0

** Важное примечание: ** Не нужно быть вызовом 'Update()', который вызывает перемещение. Если у вас есть дочерние объекты с 'RigidBody' и у вас есть анимация родителя, вы можете перемещать «RigidBody» во время обновления анимации. –