c# - 将相机移动到游戏对象的前方位置
问题描述
相机的代码是这样的......
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 到下一帧位置吗?在我看来,在一帧的一小部分距离之间徘徊并不合适。它太活泼了,我宁愿它是平滑的。
谢谢
解决方案
我会用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;
推荐阅读
- .net-core - Swagger Error: Could not resolve reference
- angular - Angular 在 AOT 构建中忽略文件加载器
- python - 在 Windows 10 上为 GTX 1050 安装带有 conda 的 Tensorflow-GPU
- php - Cant set a cookie from a wordpress plugin on a specific site
- c# - 如何捕获 System.NullReferenceException?
- typescript - VSCode:对于 Typescript,是否有一个选项可以生成一个尚不存在的函数?
- android - 无法在 Android MVVM 中创建类 ViewModel 的实例
- javascript - jsPDF 总是返回空白,特别是 Html 文件
- c - 为什么在 C 中的 strrev 之后会有一个垃圾值?
- html - 给html5视频加水印