# Simple smooth rotation problem

Hi everyone,

I am having a simple issue here I can't seem to get around whatever I try. Here's the code:

``````    if (Input.GetKeyDown("w"))
{
aileronR.transform.Rotate(35, 0, 0);

``````

What this does, when I keep the "w" pressed the gameObject rotates to 35 degrees on its X axis. What I actually look for is to get to the full 35 degrees angle in time; so if I press the "w" key the gameObject should rotate smoothly; I don't mind if on keyUp it snaps back to 0 0 0. I tried looking at Time.DeltaTime but nothing worked. However,when I tried this part of the script separately I achieved the exact end result; Here's the script that works.

``````var aileronRrotation = 15;
var aileronR : GameObject;

``````

function Update () {

``````if (Input.GetKey ("a")) {

aileronR.transform.Rotate (aileronRrotation * Time.deltaTime, 0, 0);
}

if (Input.GetKeyUp ("a")) {

aileronR.transform.rotation = Quaternion.identity;

}

``````

}

It could have something to do with the KeyUp/Key down part. I'll try this later today.

Hi, please try the following code (C#, but isnt hard to convert)

``````public class Test : MonoBehaviour

``````

{ public GameObject aileronR; public float aileronRoration = 15; public float speed = 5;

``````private float currentRotation = 0;
private bool rotationActive = false;

void Update()
{
if (Input.GetKeyDown("w"))
{
rotationActive = true;
currentRotation = aileronR.transform.eulerAngles.x;
}
if (rotationActive)
{
currentRotation = Mathf.Lerp(currentRotation, aileronRoration, (Time.deltaTime * speed));
aileronR.transform.eulerAngles = new Vector3(currentRotation, aileronR.transform.eulerAngles.y, aileronR.transform.eulerAngles.z);
if (Mathf.Floor(currentRotation) == aileronRoration)
{
rotationActive = false;
}
}
}

``````

}

This is not really an answer since the problem is not entirely solved. But this is the code that works when my plane is not flying; I attached a simple rotate animation to the plane just to see if the controls will rotate locally and they work fine; However, when I put the code in my plane script (or use it as a separate controls script) the rotation is local to .. something else; meaning, they keep the pivot but they rotate - i think - relative to camera.

this is the code.

``````var smooth = 2.0;
var tiltAngle = 30.0;
var aileronR : GameObject;
var aileronL : GameObject;
var elevator : GameObject;
var rudder : GameObject;

``````

function Update () {

``````var tiltAroundX = Input.GetAxis("Vertical") * tiltAngle;
var aileronRtarget = Quaternion.Euler (tiltAroundX, 0, 0);
var aileronLtarget = Quaternion.Euler (tiltAroundX, 0, 0);
var elevatorTarget = Quaternion.Euler (tiltAroundX, 0, 0);

aileronR.transform.localRotation = Quaternion.Slerp(transform.localRotation, aileronRtarget,
Time.deltaTime * smooth);;

aileronL.transform.localRotation = Quaternion.Slerp(transform.localRotation, aileronLtarget,
Time.deltaTime * smooth);;

elevator.transform.localRotation = Quaternion.Slerp(transform.localRotation, elevatorTarget,
Time.deltaTime * smooth);;

var tiltAroundY = Input.GetAxis("Horizontal") * tiltAngle;
var rudderTarget = Quaternion.Euler ( 0, tiltAroundY, 0);

rudder.transform.localRotation = Quaternion.Slerp(transform.localRotation, rudderTarget,
Time.deltaTime * smooth);;
}

``````

Another issue I have with this code is that I cannot use 2 axis; example - when I turn lean right, left aileron should be rotating up and the right aileron should be rotating downwards. I am just not sure where the problem is. Any help is appreciated.

Use a Vector3.Lerp(CurrentRotation,WantedRotation,(Speed * Time.deltaTime)

Works awesome, the feeling is a lot better. Before that it kind of snapped in place :)

I'll write the entire controls script in c# for now and see how it works. Do I need currentRotation and rotationActive variables for each aileron and the other controls? Thanks again !