让角色移动,使用了很多如下方法:
一、遵循刚体在FixUpdata中使用MovePosition方法移动,出现超大晃动
if (buttonDown == true && CanMove() == true)
mRigidbody.MovePosition(transform.position + cameraTransform.forward * Time.deltaTime * moveSpeed);
二、解决大部分抖动,但碰撞有的地方仍然会较大晃动
if (buttonDown == true && CanMove() == true)
{
moveDirection.Set(cameraTransform.forward.x, 0, cameraTransform.forward.z);
transform.Translate(cameraTransform.forward * Time.deltaTime * moveSpeed);
}
三、刚体施加力的作用使其移动,解决全部抖动,但有一点缺陷,当与物体发生碰撞,并且行走方向与碰撞体的角度较小时,会停止移动,此时只能加大力大小的倍数
if (buttonDown == true && CanMove() == true && mRigidbody.velocity.magnitude <= maxSpeed)
{
moveDirection.Set(cameraTransform.forward.x, 0, cameraTransform.forward.z);
if(mRigidbody.velocity.magnitude < maxSpeed/2)
mRigidbody.AddForce(moveDirection * moveSpeedParam * 5);
else
mRigidbody.AddForce(moveDirection * moveSpeedParam);
}
但是加大倍数moveSpeedParam 到一定值后,会在没有碰撞时,启动速度和行走速度特快,maxSpeed对其限制不了