unity 使用角色控制器CharacterController移动对象造成模型动画的抖动

        使用角色控制器控制对象的移动,主要用到Move和simplemove函数:

function Move (motion : Vector3)   //montion表示将控制器移动到这个坐标点注意它是局部坐标,但是坐标系参考轴却是世界坐标轴。可以用transform.TransformDirection来转换。

造成动画抖动就出在Move函数上:Move(move_direction*Time.deltaTime*speed)

       1.由于角色控制器不受重力影响,只能自己添加重力,一般做法是:在fixedupdate里改变Move的移动方向,

move_direction.y  -=9.8*Time.deltaTime//随着时间的过去,Move在Y轴上的下落速度(每帧移动距离)越来越快(模拟重力)

            2.水平面上的移动改变move_direction.x和move_direction.z就可以了。

          这里马上意识到,在凹凸不平的地面上,模拟重力的改变非常快:习惯了控制其他组件的移动,导致这样理解:

move_direction.Set(x,0,z);//想要对象在水平面上的移动

把它带入Move里,造成上一帧还在执行模拟重力,这一帧却强行把Y轴方向上的移动变为0。两帧控制器的移动差别微小就造成模型的快速抖动(摇摆)。

使用Move函数控制角色移动要保证每一帧之间move_direction的改变要缓慢平滑,因为它决定了此时角色的移动坐标。

你可能感兴趣的:(unity,C#,unity,c#,对象,动画)