По моему опыту, когда у вас гладкая камера, которая заикается, это потому, что камера - как только она набрала скорость - движется быстрее, чем объект, за которым она следует:
Проблема
- Объект движется
- Камера начинает медленно двигаться к объекту
- Она догоняет и останавливается
- Камера начинает медленно двигаться к объекту
- Повтор 2-4;заикание
Решение
Простое; отрегулируйте переменные скорости камеры , чтобы убедиться, что она никогда не полностью догоняет, когда объект движется, а скорее остается позади, чтобы не останавливаться каждые несколько кадров.
Бонусные материалы для чтения
Другие источники часто объясняют, что их решение состоит в том, чтобы неправильно поместить код в FixedUpdate, чтобы чудесным образом избавиться от заикания.Иногда получение правильного поведения от этого происходит из-за ряда вещей:
- Обновление запускает каждое обновление кадра, поэтому временной шаг (Time.deltaTime) здесь зависит от машины, но на моей машине это будетв среднем каждые 0,007 секунды.
- FixedUpdate запускается с фиксированным временным шагом, стандартное значение равно 0,002, но его можно изменить в настройках.
- Код:
float step = CameraMoveSpeed * Time.deltaTime;
Давайте предположим, что CameraMoveSpeed равен 1, ради простой математики.
Итак, с этими числами мы можем понять, что помещение кода в Update даетследующий результат
Обновление
Каждые 0,007 секунды мы обновляем тиканье камеры с помощью CameraMoveSpeed * 0,007
FixedUpdate
Каждые 0,02 секунды мы обновляем тик камеры с помощью CameraMoveSpeed * 0,007
Результат
Они перемещаются на одну и ту же длину каждый тик, но тики реже встречаются в FixedUpdate, что приводит к более медленному сглаживанию камеры и, таким образом, «решает» проблему, описанную как ответ на этот пост, в некотором смысле,настраивая переменные скорости камеры, чтобы получить более медленное следование за камерой, но вместо того, чтобы настраивать переменные, вы перенесли свой код в обновление физики вместо обновления кадра, и вы решили проблему только случайно, не понимаяAUSE.