繁体   English   中英

将相机向前移动到游戏对象 position

[英]Move camera to a gameobjects forward position

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

The code for the camera is this... 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); 是说根据汽车的速度向前看一点点,所以当我们静止时,汽车位于相机的中心,当汽车快速行驶时,相机稍微向前一点。 我遇到的问题是,当汽车快速转弯时,最后一部分会使相机快速转动。 我希望我可以平滑相机的 position 以追逐它需要跟踪的 position。 如果您可以将现有的 position 想象成车前的一个点,我希望相机能够平稳地追逐那个点,而不是非常活泼。

例子

所以不知道如何 go 关于这个。 我需要获取当前的 position 和 Lerp 到下一帧 position 吗? 在我看来,在一帧的一小部分距离之间徘徊并不合适。 它太活泼了,我宁愿它是平滑的。

谢谢

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM