我正在创造一种第一人称太空入侵者游戏。我创造了一个可左右移动的宇宙飞船。
如果你向左或向右按下,宇宙飞船会倾斜,我使用Unity空间射击教程中的代码:
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
rigidbody.velocity = new Vector3(moveHorizontal, 0f, 0f) * speed;
rigidbody.position = new Vector3(
Mathf.Clamp(rigidbody.position.x, xMin, xMax),
0.0f,
Mathf.Clamp(rigidbody.position.z, zMin, zMax)
);
rigidbody.rotation = Quaternion.Euler(0f, 0f, rigidbody.velocity.x * -tilt);
}
问题是如果我按住右键,然后立即按下左键,船只会按向另一个方向。如果我按下右键放开,船将顺利地向中心旋转。如果我在按下右键后按下左键,它会以相反的倾斜方式拍摄而没有平滑过渡。
我想这是因为来自Input.GetAxis("Horizontal")
的箭头键从输入返回1或-1(1表示正确,-1表示左侧),这意味着如果我按下右键键,然后直接左键,整个旋转乘以-1,导致捕捉效果。
有没有办法使用箭头键从一侧平滑地旋转到另一侧而不会导致倾斜拍摄?
答案 0 :(得分:1)
Rigidbody课程有助于您安全地完成这项工作。顺利。查看MovePosition https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html和MoveRotation https://docs.unity3d.com/ScriptReference/Rigidbody.MoveRotation.html
e.g:
rigidbody.MovePosition(transform.position + new Vector3(Input.GetAxis("Horizontal"), 0f, 0f) * Time.deltaTime);