从左到右旋转捕捉

问题描述:

我在创建一种第一人称太空入侵者游戏。我创造了一个可以左右移动的太空船。从左到右旋转捕捉

飞船倾斜取决于是否按向左或向右,我使用的代码从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

这是令人难以置信的错误在任何方面对于这一点,汤姆使用四元数。如果它是一个刚体,你应该简单地施加力量或者扭矩。要添加toruqe,请使用“AddTorque”(https://docs.unity3d.com/ScriptReference/Rigidbody.AddTorque.html)。添加强制你使用“AddForce”(https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html) – Fattie

+0

发生这种情况,因为你直接使用你的输入速度和正如你所说,它会是1或 - 1乘以运动。尝试改变旋转,并通过moveHorizo​​ntal(1或-1)增加倍数。 'rigidbody.rotation = Quaternion.Euler(0f,0f,rigidbody.rotation.x + speed * moveHorizo​​ntal);' –

+0

@JoeBlow虽然我同意它可能是错误的(我已经从Unity的教程中获取代码:P )你也许知道**为什么**这是错的?就这样我知道:-) – Tom

刚体类具有帮助您平滑地安全地做到这一点&的功能。退房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);