关于unity:黑魂复刻游戏的摄像机抖动问题Unity随手记

11次阅读

共计 718 个字符,预计需要花费 2 分钟才能阅读完成。

明天实现的内容:
问题产生的起因
在咱们的代码中,摄像机位移应用了 SmoothDamp,然而旋转却是间接欧拉角赋值,这导致了摄影机地位还没有调整完,旋转就曾经到位了。设想一下这个过程,摄像机的眼帘核心在旋转时会偏移角色颈椎地位,这就产生了抖动。

        // 摄像机游戏对象的挪动和旋转
        cameraGO.transform.eulerAngles = this.transform.eulerAngles;

通过齐全固定摄像机每帧的指向解决问题
通过应用 LookAt,在每一帧将摄像机指向到 cameraHandle 的 transform,咱们就能解决问题,这是最简略的方法。

        // 摄像机游戏对象的挪动和旋转
        cameraGO.transform.LookAt(cameraHandle.transform);

可能呈现的使用 RootMotion 动画晃动问题
当咱们使用上述解决方案当前,可能会呈现使用了 RootMotion 的动画播放时呈现晃动的问题,这个问题可能来自两处。
1.Animator 的动画更新速率问题,咱们的动画机是能够抉择何种更新模式的,normal 意味着和 Update 一起更新,依据状况咱们抉择 Animator Physics。

2. 该游戏动画 Root Motion 的信号问题,Root Motion 可能会有杂波,咱们能够用一些伎俩平滑掉。以下计划将上一帧的信号与以后帧的信号相加再除以 2。

        // 更新 m_deltaPos 为动画机的 Root Motion 之所以用累加是因为物理帧和动画帧不一样 在物理帧的最初会将 m_deltaPos 清零
        // 加上上一帧的再除以 2.0 是为了平滑
        m_deltaPos += (m_deltaPos + (Vector3)_deltaPos) / 2.0f;

正文完
 0