Rigidbody移动时抖动问题
撞墙抖动
Unity中物体移动有非常多的方式;
比如:
transform.position += dir*speed*Time.deltaTime;
transform.Translate(pos, Space.World);
但是这种方式与碰撞结合时,是先位移在判断碰撞,会导致撞墙抖动;
而钢体中修改速度,或是添加力,是先判断碰撞在移动,有效解决撞墙抖动问题;
RigidBody rig;
rig.AddForce(dir*speed);
rig.velocity = new Vector3(pos.x, 0, pos.z) * speed * Time.fixedDeltaTime;
众所周知,人物移动时乘以Time.fixedDeltaTime,相当于逻辑在FixedUpade中调用,每个0.02s移动一次;
移动抖动
如果你的摄像机跟随人物移动,一般会将摄像机逻辑写在LateUpdate中处理,保证每一帧的最后调用,有效保护游戏的公平性;
但这样钢体移动和摄像机移动不同步,会导致移动时屏幕不断抖动;
所谓这里的摄像机逻辑建议都写在FixedUpdate周期中;
public class CameraController : MonoBehaviour
{
public Transform hero;
private float distacne = 6.5f;
private float height = 6.3f;
public void FixedUpdate()
{
transform.LookAt(hero);
transform.position = hero.position + new Vector3(distacne,height,0);
}
}