首页 > 解决方案 > 将相机移动到游戏对象的前方位置

问题描述

这将很难解释,但我会试一试。我有一个这样的相机设置... 在此处输入图像描述

相机的代码是这样的...... 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 到下一帧位置吗?在我看来,在一帧的一小部分距离之间徘徊并不合适。它太活泼了,我宁愿它是平滑的。

谢谢

标签: c#unity3dcamera

解决方案


我会用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;

推荐阅读