So I’ve been working on a flight sim using arcade physics. I’d like to have the player roll on the z-axis back to 0 if the player flips upside down.
The ship currently stays upright when it turns using yaw controls (x-axis), but when it flips upside down using pitch controls (y-axis) it stays upside down. I can detect when the player is upside down, but I’m having trouble figuring out how to correct this.
I’ve looked all over the unity community, and tried several different approaches, but I can seem to get this working right. Anyone have any suggestions?
public class PlayerCon : MonoBehaviour {
private Rigidbody rb;
private float speed = 15.0f;
public float tilt = 10.0f;
private float moveHorizontal = 0.0f;
private float moveVertical = 0.0f;
private float tiltHorizontal;
private bool upSideDown = false;
void Start(){
rb = GetComponent<Rigidbody>();
}
void FixedUpdate(){
moveHorizontal = Input.GetAxis ("Horizontal") + moveHorizontal;
tiltHorizontal = Input.GetAxis ("Horizontal");
moveVertical = Input.GetAxis ("Vertical") + moveVertical;
rb.transform.position += transform.forward*speed*Time.deltaTime;
//player can rotate from side to side, up and down, and tilts a little when using yaw contols
rb.rotation = Quaternion.Euler (moveVertical, moveHorizontal, tiltHorizontal * -tilt);
if (Vector3.Dot (transform.up, Vector3.down) > 0) {
Debug.Log ("upside down"); //what can i do here?
} else {
Debug.Log ("right side up");
}
}
}