Страницы

Поиск по вопросам

вторник, 4 июня 2019 г.

Неравномерное движения объекта в Unity при помощи velocity

При перемещении физического объекта (Rigidbody) в Unity3d происходят некоторые рывки. Пытался изменить значение timeStep, но это мало чем помогло. Объекты начали двигаться плавнее, но при этом рывки сохранились. Как решить эту проблему?
Способы которые я пробовал:
Перемещал объект при помощи transform.Translate() (плохая идея, я знаю) Перемещал объект при помощи transform.postion = Vector3.Lerp() (идея ещё хуже)
Остановился на velocity. Рывки во всех случаях остались.


Ответ

Объект у вас с кинематикой(у Rigidbody признак IsKinematic) или динамический?
Если двигаете в физике динамический объект то прикладывают силу чтобы заставить объект двигаться плавно по законам физики(например Rigidbody.AddForce).
Если объект кинематика, то бишь вы управляете им из кода, то движение нужно рассчитывать самостоятельно через один из тех способов что вы описываете. Только надо принимать в расчет две вещи: где вы его вызываете и сколько времени прошло между вызовами. Так если вы меняете в Update() то учитываем Time.deltaTime(время между кадрами отрисовки) для того чтобы определить на сколько за кадр сдвинуть объект. А если вызываете в методе FixedUpdate() то используем время Time.fixedDeltaTime(время между расчетами отдельных итераций по физике) чтобы скорректировать движение объекта.
Кстати мы проводили эксперименты, вызов между FixedUpdate() выполняется не совсем по времени заданном в настройках TimeManager для Fixed Timestep. Все зависит от железа и тактовой частоты процессора. Если скажем компьютер делает расчеты с частотой 0.035 с, а Fixed Timestep выставлен 0.012 с, то между первыми двумя тактами вызов FixedUpdate() будет сделан дважды, причем выполняться они будут друг за другом без всякого перерыва. На следующем такте будет три вызова и т.д.

Комментариев нет:

Отправить комментарий