【问题标题】:Choppy camera movement with smooth follow平稳跟随的波涛汹涌的相机运动
【发布时间】:2017-04-13 03:12:25
【问题描述】:

在多人浏览器游戏中,当我的玩家使用相机后,我看到相机卡顿。玩家位置是从服务器接收到的,玩家会移动到那个位置,我的目标是让相机通过自己的额外平滑平滑地跟随玩家。

您可以在http://orn.io 找到我的游戏以查看当前状态,没有平滑跟随相机 lerping,这更好,但会导致运动不稳定并让人头疼。相机的当前代码如下:

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 而抖动。

如果有人能提出一种改进相机的方法,请按照现在的代码进行改进,我将不胜感激。

【问题讨论】:

    标签: c# unity3d unity5 lerp


    【解决方案1】:

    您是否有任何特殊原因需要使用 Mathf.Lerp 函数?

    Unity 有一个函数,Vector3.SmoothDamp,它是专门为运动 lerping 设计的:

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

    上面将通过给 SmoothDamp 方法控制速度变量来平滑地跟随玩家。这是假设您为它提供了一个 ref 来存储当前速度和阻尼时间。

    您还可以调整阻尼时间来改变过渡的平滑程度。此函数还将自动考虑玩家的移动 mid-lerp。

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

    达到目标所需的大致时间。较小的值会更快地达到目标。

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

    【讨论】:

    • 这是我将代码更改为使用您的建议的内容:hastebin.com/inupemituq.cs 这是现在的样子youtube.com/watch?v=nA3Pp4qOKwE 所以问题是当smoothdamp 值非常高时它似乎没有有口吃,但使用 a 和 d 的旋转反应非常迟钝
    • 尝试将潮湿时间设置为一个恒定的浮点值。我将我的设置为 0.2f,它似乎运行良好。
    • 将其设置为恒定值似乎会导致同样的抖动
    • 您是否尝试将其放入 FixedUpdate 中?
    • 是的,这是我使用的代码hastebin.com/axovofotun.cs,这是一个结果视频,我在其中尝试了不同的恒定阻尼时间浮点值 youtube.com/watch?v=CMLOR6_Oq3Y
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2012-02-29
    • 2015-11-07
    相关资源
    最近更新 更多