Переместить камеру в игровое положение вперед. - PullRequest
0 голосов
/ 20 сентября 2019

Это будет сложно объяснить, но я попробую.У меня камера настроена вот так ... enter image description here

Код для камеры такой ... transform.position = new Vector3(car.transform.position.x-posX+carPos, car.transform.position.y+posY, car.transform.position.z-posZ) + car.transform.forward * (Mathf.Clamp(speed, 0, 0.70f)*40);

Что в основном равнозначно получениюавтомобиль x, y и z, сместите его немного выше назад и влево.+ car.transform.forward * (Mathf.Clamp(speed, 0, 0.70f)*40); говорит о том, что нужно смотреть впереди автомобиля на небольшую величину, в зависимости от скорости автомобиля, поэтому, когда мы неподвижны, автомобиль находится в центре камеры, когда автомобиль движется быстро, направьте камеру немного впередиавтомобиль.У меня проблема в том, что последняя часть заставляет камеру вращаться, когда машина быстро поворачивает.Я надеюсь, что смогу сгладить положение камеры, чтобы отследить положение, необходимое для отслеживания.Если вы можете представить себе существующую позицию в виде точки перед автомобилем, я хочу, чтобы камера плавно преследовала эту точку, вместо того, чтобы быть очень быстрой.

Пример

Так что не уверен, как это сделать.Нужно ли мне получить текущую позицию и Lerp к следующей позиции кадра?Мне кажется, что прыгать между кадрами на небольшом расстоянии не правильно.Это слишком быстро, и я бы предпочел, чтобы все было гладко.

Спасибо

1 Ответ

1 голос
/ 20 сентября 2019

Я бы использовал для этого Vector3.SmoothDamp.Чтобы это работало, вам нужно отслеживать (относительную) скорость камеры и смещение камеры из-за скорости между кадрами.

В целом, с некоторыми параметрами вы можете точно настроить, чтобы это подходило, это может выглядетьвот так:

Vector3 camVelocity = Vector3.zero;
Vector3 camSpeedOffset = Vector3.zero;
float cameraSmoothTime = 0.1f;
float maxCameraOffsetVelocity = 1f;

...

Vector3 camSpeedOffsetTarget = car.transform.forward * (Mathf.Clamp(speed, 0, 0.70f)*40);
camSpeedOffset = Vector3.SmoothDamp(camSpeedOffset, camSpeedOffsetTarget, 
        ref camVelocity, cameraSmoothTime, maxCameraOffsetVelocity);

transform.position = new Vector3(
        car.transform.position.x-posX+carPos, 
        car.transform.position.y+posY, 
        car.transform.position.z-posZ) 
      + camSpeedOffset;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...