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.

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

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!

If you’re just want a nice demo, then you can use this script:

IEnumerator spin(){
    while(true){
        yield return new WaitForSeconds(2.0f);
        float timer = 0f;
        while(timer<1){
            transform.rotate(0,0,180*Time.deltaTime);
            timer = timer + Time.deltaTime;
            yield return null;
        }
    }
}

void Start(){
    StartCoroutine(spin());
}

But, if you want precidion in rotation, some changes should be applied:

IEnumerator spin(){
    while(true){
        yield return new WaitForSeconds(2.0f);
        float timer = 0f;
        Quaternion lastRotation = transform.rotation;
        while(timer<1){
            transform.rotate(0,0,180*Time.deltaTime);
            timer = timer + Time.deltaTime;
            yield return null;
        }
        transform.rotation = lastRotation;
        transform.rotate(0, 0, 180);
        }
}

void Start(){
    StartCoroutine(spin());
}

Hope it helps!