首页 文章

波普的相机运动,顺畅跟随

提问于
浏览
0

在我的多人游戏浏览器游戏中用我的相机播放我的播放器之后,我使用平滑的跟随来点击相机口吃 . 从服务器接收玩家位置,玩家到达该位置,我的目标是让摄像机平稳地跟随玩家自己的额外平滑 .

您可以在http://orn.io找到我的游戏以查看当前状态,而不是顺利跟随相机,这更好,但会导致波动,并造成头痛 . 摄像机的当前代码如下:

void LateUpdate ()
{
    if (Target == null) {
        return;
    }

    currentScale = Mathf.Lerp(currentScale, -GameManager.TotalMass, Mathf.Clamp01 (Time.deltaTime * heightDamping));

    Vector3 h = currentScale * 2f * Target.up;
    Vector3 f = currentScale * 3f * Target.forward;

    // tried lerping to this value but it causes choppy stutters
    Vector3 wantedPosition = new Vector3(Target.position.x, Target.position.y, currentScale * 2) + h + f;

    myTransform.position = wantedPosition;

    myTransform.LookAt (Target, -Vector3.forward); // world up
}

我已经尝试了几天来修补这些值,使用固定的时间戳,将相机移动放在FixedUpdate / Update中,使用MoveTowards和其他更改,但我仍然遇到问题 .

我的问题的部分原因是玩家位置在lerp中间变化,这会导致口吃,因为目标位置在lerp中间变化 . 由于lerp的目标位置在lerp的中间被改变,这导致相机跳跃/切换,并且由于LookAt而抖动 .

我很感激,如果有人能提出一种改进相机的方法,就像现在的代码一样 .

1 回答

  • 1

    您是否需要使用Mathf.Lerp函数?

    Unity有一个功能,Vector3.SmoothDamp专为运动训练而设计:

    void FixedUpdate() {
       // Code for your desired position
       transform.position = Vector3.SmoothDamp(transform.position, wantedPosition, ref moveVelocity, dampTime);     
    }
    

    通过给出SmoothDamp方法控制速度变量,上面将顺利地跟随玩家 . 这假设你为它提供了一个ref来存储当前的速度和潮湿的时间 .

    您还可以调整潮湿时间以更改过渡的平滑程度 . 此功能还将自动考虑玩家在lerp中的移动 .

    为了澄清,引用文档,上面的dampTime是:

    大约达到目标所需的时间 . 较小的值将更快地达到目标 .

    还可以考虑使用Quaternion.slerp在两次旋转之间平滑旋转 .

相关问题