【发布时间】:2019-01-13 02:58:29
【问题描述】:
我使用rigidbody.MovePosition 来围绕我的角色移动,并有一个摄像机跟随它。问题是当我突然切换方向时,玩家会传送一点,而不是在相反的运动方向上平稳移动。播放器和相机的脚本设置为 FixedUpdate ,如果我尝试将相机移动到 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);
}
【问题讨论】:
-
您的玩家可能没有传送,但相机在切换到相反方向时出现问题。过去,SmoothDamp 存在问题,无法接收“一致”输入,即从一种平滑类型切换到另一种类型时,平滑会导致问题。我认为您的问题可能类似。
标签: unity3d camera game-physics