我使用了body.MovePosition来移动我的角色,并在其后面放置一个摄像头。问题是当我突然切换方向时,播放器将稍微移动一点,而不是沿相反的运动方向平稳地移动。播放器和Camera的脚本设置为FixedUpdate,如果我尝试将Camera移至LateUpdate,则整个过程会抖动很多。
玩家脚本:
private void Start()
{
m_Rb = GetComponent<Rigidbody>();
m_InputAxisName = "Vertical" + m_playerNumber;
m_StrafeAxisName = "Horizontal" + m_playerNumber;
}
private void FixedUpdate()
{
m_InputAxisValue = Input.GetAxis(m_InputAxisName);
m_StrafeAxisValue = Input.GetAxis(m_StrafeAxisName);
//Movement
Vector3 movement = (transform.forward * m_InputAxisValue * m_Speed * Time.deltaTime) + (transform.right * m_StrafeAxisValue * m_Speed * Time.deltaTime);
m_Rb.MovePosition(m_Rb.position + movement);
}
相机脚本
void FixedUpdate () {
m_NewPos = m_player.transform.position + m_offset;
if (m_Rotate)
{
Quaternion newRot = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * m_rotSpeed, Vector3.up);
m_offset = newRot * m_offset;
}
transform.position = Vector3.SmoothDamp(transform.position, m_NewPos, ref m_MoveSpeed, m_DampTime); ;
if (m_Rotate)
transform.LookAt(m_player);
}
答案 0 :(得分:0)
问题在于,您的运动逻辑是在FixedUpdate中实现的,但是您需要使用time.deltaTime。您必须使用fixedDeltaTime版本。 另外,请勿尝试在FixedUpdate中获取输入,这也可能导致对象的抖动和卡顿/跳动。
取而代之的是从Update获取输入,并使用变量将其传递到FixedUpdate内部。
最后一个,根据您的“场景设置”和“相机”,查看您的RigidBody进行的内插/外推,这也可能会有所帮助。
答案 1 :(得分:0)
我终于弄清楚了问题所在,关于固定更新中相机的旋转。我将其移动以进行更新,现在可以正常使用