x


Simple rotation script. (loop)

I feel stupid asking this, but i'm not sure how its done. I would like an object to rotate 180 degrees on it's x axis after waiting 3 seconds, and then repeat. But when I use this script, it just waits three seconds on load time, then continues spinning forever. Sorry for this stupid question

function spin(){
    yield WaitForSeconds(3.0);
    transform.Rotate(0, 0, 180 * Time.deltaTime);
}

function Update(){
    spin();
}

I guess I want the spin function to loop, but I don't know how.

more ▼

asked Jun 11 '11 at 06:22 PM

Eli Davis gravatar image

Eli Davis
233 11 14 15

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

2 answers: sort voted first

That's the old fashioned way to do this:

private var tCycle:float;

function Update(){
  var t = Time.time;
  if (t>tCycle) tCycle = t+3;
  if (tCycle-t<=1){ // Spins during the last second
    transform.rotate(0,0,180*Time.deltaTime);
  }
}

I'm sure yield could be a better alternative, but I just can't understand this %#@! thing!

more ▼

answered Jun 11 '11 at 06:57 PM

aldonaletto gravatar image

aldonaletto
41.5k 16 42 197

Oh, I forgot to initialize tCycle to zero at the beginning. I think the system does that, but Murphy's Laws are implacable...

Jun 11 '11 at 07:01 PM aldonaletto

thank you very much. could you explain the first if statment that ended with ;? how does that work. The script works by the way

Jun 11 '11 at 07:03 PM Eli Davis

tCycle always indicate the end of a 3 seconds cycle. Whenever Time.time is higher than tCycle, tCycle is reloaded with Time.time plus 3 seconds. Be aware that after some time the object may drift a little, stopping at a slight different angle due to errors accumulated at each cycle. If it happens, call for help here and we'll try to find some way to fix it.

Jun 11 '11 at 07:19 PM aldonaletto

Yes, the more the game lags, the more it seems to get the angle wrong, I'm not completely sure how to fix this, but an idea is to set the rotation to 0, 0, 0 after a certain amount of turns or idk. Something like that? Also, could I put this on my blog? I'l reference people to your profile for credit.

Jun 11 '11 at 10:21 PM Eli Davis

I just can't edit my answer! Damn new UA!
Anyway, you can fix the problem changing the first if this way:

if (t>tCycle){
tCycle = t+3;
if (transform.localEulerAngles.z<90)
transform.localEulerAngles.z = 0;
else
transform.localEulerAngles.z = 180;
}

It forces the object to the ideal angle at the beginning of each cycle.
Feel free to put this solution in your blog - I'll be glad to share this with more people!

Jun 11 '11 at 11:06 PM aldonaletto
(comments are locked)
10|3000 characters needed characters left

If I understand the question, what you want is to have the object finish a rotation of 180 degrees every 3 seconds? What your code is doing now is initially waiting for 1 second (your yield statement), and then spinning 180 degrees per second after that. I think what you want would look something like this.

function spin() {
       transform.Rotate(0,0,60*Time.deltaTime)
}

function Update() {
      spin();
}

What's happening here is that your rotating the object 60 degrees per second (which is the same thing as saying 180 degrees every 3 seconds).

Hope that's what you were looking for!

-Kith

more ▼

answered Jun 11 '11 at 06:54 PM

Kith gravatar image

Kith
526 27 28 38

I'm sorry I worded the question wrong, I re worded it now. but thank you for your answer, you awnsered it correctly wrong worded question

Jun 11 '11 at 06:59 PM Eli Davis

No worries lol. Aldonaletto's answer should work fine for what you're trying to do then.

Jun 11 '11 at 07:23 PM Kith
(comments are locked)
10|3000 characters needed characters left
Your answer
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:

x2173
x336
x296
x170
x35

asked: Jun 11 '11 at 06:22 PM

Seen: 4299 times

Last Updated: Jul 16 '11 at 11:39 PM