【问题标题】:Move camera to a gameobjects forward position将相机移动到游戏对象的前方位置
【发布时间】:2019-09-19 22:45:21
【问题描述】:

这将很难解释,但我会试一试。 我有一个这样的相机设置...

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

Example

所以不知道该怎么做。我需要获取当前位置和 Lerp 到下一帧位置吗?在我看来,在一帧距离的一小部分之间徘徊是不合适的。 它太活泼了,我宁愿它是流畅的。

谢谢

【问题讨论】:

    标签: c# unity3d camera


    【解决方案1】:

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

    【讨论】:

    • The most common use is for smoothing a follow camera.。以前从未听说过这个,但听起来很完美。谢谢!
    • 该死的家伙,该代码 100% 完美运行。你是救世主。片尾字幕肯定提到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2017-07-11
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多