- Home /
Adding a speed to rotation
I am using the most basic rotation code for my object, it does exactly what i want but at a speed that is far to fast, how do i add a speed variable so i would be able to change it to a suitable speed?
Update () { transform.rotation = Random.rotation; }
Can't you just multiply it with another Vector3 variable? [edit] Correction, make that a float
Answer by ncallaway · Jan 03, 2014 at 08:19 AM
Your current code looks like it sets the rotation of the object to a random orientation every frame. There's not really a "speed" for the object involved. To see what I mean, consider the following code snippet:
void Update()
{
transform.position = new Vector3(random.value, random.value, random.value);
}
What is the "speed" of the object in this scenario. It doesn't really have one. It's just jumping around instantaneously between random positions. You couldn't really "slow" this object down.
Continuing the analogy of linear motion, you might consider what it would look like for the object to have a speed.
public float speed = 5.0f;
private Vector3 direction;
void Start()
{
direction = Random.onUnitSphere;
}
void Update()
{
transform.Translate(direction * speed * Time.smoothDeltaTime);
}
Now, in our linear example, it's easier to see how to do what we want. We pick a random direction every time the GameObject is started, and then we can easily change the speed to whatever we want in the Editor View for this object.
Finally, we can bring our linear example back to a rotational one.
public float angularVelocity = 10.0f;
private Vector3 axisOfRotation;
void Start()
{
axisOfRotation = Random.onUnitSphere;
}
void Update()
{
transform.Rotate(axisOfRotation, angularVelocity * Time.smoothDeltaTime);
}
In this last code snippet we select an arbitrary axis to rotate our object around, and then rotate it at a constant angular velocity. Then we can easily change this angular velocity using the editor controls to whatever suits our preference.
Thank you so much for being really descriptive, i can see what you mean about how it couldn't have had a speed and such to begin with.
the only error i had after applying your code was on line 6
"Random.onUnitSphere();" i replaced this with "Random.onUnitSphere * 1"
after that it worked perfectly. thanks for you time.
Ah! Thank you for the correction! I forgot that Random.onUnitSphere was a property and not a method. I'll update the code to call that correctly. Thanks again! :)
Your answer
Follow this Question
Related Questions
Different speed on different phones 0 Answers
Instant Rotation 2 Answers
Slowing Down Rotation Speed 1 Answer