前言
之前制作摄像机时,我们曾经想使用SmoothDamp来实现摄像机延迟移动(摄像机博客的链接),但是造成了摄像机旋转时的抖动问题,今天的博客就是为了解决这个问题。
今天实现的内容:
问题产生的原因
在我们的代码中,摄像机位移使用了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;
复制代码© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    






















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
