# Controlling pitch , yaw and roll of an airplane

Discussion in 'Scripting' started by AnupamSahu, Jun 3, 2015.

1. ### AnupamSahu

Joined:
May 16, 2015
Posts:
8
So i have been trying to rotate an airplane along the x y z axes such that it has a free rotation in the x(pitch) and y(yaw/turn) axes but a limited lean/roll in the z axis.. I have written the following script , but it suffers from gimbal lock... pleaseee help...
please suggest some alternative methods to get the desired results without gimbal lock.

Code (CSharp):
1.
2. using UnityEngine;
3. using System.Collections;
4.
5. public class TestScript : MonoBehaviour {
6.
7.     public float rollAngle = 90f;
8.     public float pitchSpeed = 2f;
9.     public float turnSpeed = 3f;
10.     private Rigidbody rigidBody;
11.
12.     void Start()
13.     {
14.         rigidBody = GetComponent<Rigidbody>();
15.     }
16.
17.     void Update()
18.     {
19.         Vector3 euler = transform.eulerAngles;
20.         float turnTorque = 0;
21.
22.         euler.z = Mathf.Lerp(euler.z , -Input.GetAxis("Horizontal")*rollAngle , 1.0f);
24.
25.         transform.rotation = Quaternion.Lerp(transform.rotation , addRot , 0.2f);
26.         transform.Rotate(new Vector3(Input.GetAxis("Vertical")*pitchSpeed,0,0));
27.
28.         turnTorque = turnSpeed*Input.GetAxis("Horizontal");
30.
31.         rigidBody.angularDrag = (turnTorque==0)?10:3;//Prevents rotation due to inertia.
32.
33.     }
34. }

2. ### hoesterey

Joined:
Mar 19, 2010
Posts:
558
I have some turret code I can post when I get home if you need it though I'm not 100% thrilled with it. Love to see an out of the box solution for rotation constraints. I think no one has made a solid asset for this as only 3 humans in the world can do proper quaternion rotation. p.s not sure my code will work for you as it uses 2 gameobjects to simplify the math.

3. ### AnupamSahu

Joined:
May 16, 2015
Posts:
8
no problem i will give it a try.. thank you.. anyways who are the 3 humans

4. ### AnupamSahu

Joined:
May 16, 2015
Posts:
8
Hey you must try out the above code by adding it to a airplane gameobject and you will get to know the problem when the airplane rotates 90 degs on x axis

unityunity