x


Rotate to 0

Hi,

I have a spaceship that rotates on the z axis with a max of 30 degrees when the Horizontal axis is held down to give the effect of roll like an airplane. How can I make my object rotate back to 0 degrees when the Horizontal axis is released? So the object only rotates while the left/right keys are held and then it slowly rotates back to 0 when these keys are let go?

Cheers.

more ▼

asked Sep 17 '11 at 01:07 AM

stuthemoo gravatar image

stuthemoo
61 10 10 11

(comments are locked)
10|3000 characters needed characters left

0 answers: sort voted first

How about this- instead of using the Horizontal axis directly, have the Horizontal axis define a "target roll"- this determines how far you want the spaceship to bank. Then in your Update function interpolate between your current roll and the target roll using a function like Mathf.Lerp or Vector3.Lerp. Or, better still, you could weight it so that the interpolation amount changes depending on how much of the axis is pressed- so that if the axis is at full lock it interpolates fast, and if the axis is at zero it interpolates slowly, something like this-

// This is the maximum angle that your ship will rotate to (assign it in editor)
public float maxAngle = 30;
// This is the stored angle that your ship is at
float currentAngle = 0;

void Update()
{

    // This makes your angle somewhere between -30 and 30 degrees
    float targetAngle = Input.GetAxis("Horizontal") * maxAngle;
    // This makes the interpolation faster when the input is pressed down,
    // making sure that the value is always positive.
    float interpolationSpeed = 1 + (Mathf.Abs(Input.GetAxis("Horizontal") * 10));

    // This smoothly sets the current angle based on the input
    currentAngle = Mathf.Lerp(currentAngle, targetAngle, interpolationSpeed);

   // replace this with however you implement the final value
   transform.rotation = Quaternion.Euler(0, 0, currentAngle);
}
more ▼

answered Sep 17 '11 at 02:10 AM

syclamoth gravatar image

syclamoth
15k 7 15 80

Thanks syclamoth! Only problem is that it will only rotate in one direction currently, I need to set the target angle as -30 but I can't figure out how to make this work?

Sep 18 '11 at 01:42 AM stuthemoo

Input.GetAxis("whatever") should return a value between 1 and -1. Have a look at how your axis is set up, and see if there's anything limiting its rotation!

Sep 18 '11 at 04:33 AM syclamoth

@stuthemoo: Use comments if you need further information. The Answer button is dedicated for actual Answers to the question. If you have another question you should ask a new seperate question. If you need more help with this question use comments or edit your question to improve it.

Sep 18 '11 at 04:36 AM Bunny83

No, my Horizontal axis is set up fine and works for the movement of the spaceship. When I use log.debug to show the value of targetAngle i am getting negative numbers one way and positive numbers the other. Are you sure theres nothing in the script that could be causing this?

Sorry Bunny83 that was an accident :/

Sep 18 '11 at 09:12 AM stuthemoo

Put Debug.Log lines inbetween every line of code- this way you can find out exactly what is happening everywhere! I don't know why it isn't working properly- unless I had the code right in front of me, I can't work out what the problem is. How are you implementing the final value?

Sep 18 '11 at 09:43 AM syclamoth
(comments are locked)
10|3000 characters needed characters left
Be the first one to answer this question
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x980
x746
x36
x14

asked: Sep 17 '11 at 01:07 AM

Seen: 1585 times

Last Updated: Aug 16 '12 at 11:34 PM