# Rotate to 0

 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 61 ● 10 ● 10 ● 11 syclamoth 15k ● 7 ● 15 ● 80 add new comment (comments are locked) 10|3000 characters needed characters left ▼ Viewable by all users

 0 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 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 add new comment (comments are locked) 10|3000 characters needed characters left ▼ Viewable by all users
Be the first one to answer this question

By Email:

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