#c# #unity3d
#c# #unity3d
Вопрос:
Я понимаю, что это довольно часто задаваемый вопрос, однако мне еще предстоит найти решение для моего конкретного сценария:
Я создаю серверную авторитетную игру, сервер вычисляет движение и отправляет его клиенту в виде Вектора3. Этот Вектор3 сохраняется в переменной при получении, а в обновлении позиция устанавливается равной вектору 3.
Поворот камеры зависит от клиента, поворот вычисляется на основе дельты мыши и добавляется к текущему повороту. Вращение по оси Y применяется ко всему корпусу (для поворота), а вращение по оси X применяется к камере (для просмотра вверх и вниз). Все это делается в late update
При перемещении и просмотре объекта он, кажется, дрожит очень быстро. Все найденные мной решения не работают, я предполагаю, что это связано с тем, что они предназначены для устранения дрожания камеры при движении жесткого тела
Комментарии:
1. Не могли бы вы опубликовать свой код и, возможно, добавить видео о том, о каком именно дрожании вы говорите? Я думаю, проблема может заключаться просто в том, как вы получаете значения из-за задержки сервера / сети.. вероятно, вам следует добавить какую-то интерполяцию (
Vector3.Lerp
и т.Vector3.MoveTowards
Д.)
Ответ №1:
При работе с физикой, поворотами, позициями и другими связанными с этим вещами рекомендуется использовать FixedUpdate
вместо Update
.
Почему это происходит?
https://docs.unity3d.com/ScriptReference/MonoBehaviour .FixedUpdate.html
Ну, Fixed Update
это называется фиксированной частотой кадров и более надежно для физики.
Комментарии:
1. Но когда я использую FixedUpdate для камеры, кажется, что при вращении она имеет более низкую частоту кадров
2. Попробуйте использовать FixedUpdate для определения положения вашего проигрывателя и использовать Update для камеры. Также попробуйте установить положение камеры вне разделителя