Creating function that lasts for x seconds

Hey guys,

Not sure if I’m just stupid right now but I got a small problem. I want to create a function that lasts for x seconds.

In my case I want to call a function that rotates an object by x degrees. But I don’t want the object to be rotated instantly (within 1 frame) but slowly. The process of the rotation should always last for 1 second. So this is what my script looks like:

function Update ()
	{
	if(Input.GetKeyDown("r"))
		{
		RotateObject(90);
		}
	}
	
function RotateObject (degrees : int)
	{
	transform.RotateAround(Vector3.zero, Vector3(0,0,1), degrees * Time.deltaTime);
	}

Has anybody an idea how I can make the function RotateObject last for 1 second?

Hum…
Well I am not sure about the exactly one second timing here but this can give you a good example of how I might do it. You can look for better ways of timing it if you would like:

var timeCounter:float = 0.0f;
var timeToRotate:float = 1.0f;
function Update ()
     {
     if(Input.GetKeyDown("r"))
         {
            if(timeCounter < timeToRotate){ //Added this to your code to execute this script only if it is under 1 second time count.
                RotateObject(90);
                timeCounter += Time.deltaTime;
             }
         }
     }
     
 function RotateObject (degrees : int)
     {
       
     transform.RotateAround(Vector3.zero, Vector3(0,0,1), degrees * Time.deltaTime);
     }

You of course would have to decide how you would want to reset the variable timeCounter back to zero to count again if you wanted to.

I’d use a Coroutine. Coroutines are specifically designed to allow you to stop what you’re doing in the middle of a frame and come back to it next frame. I’m really only familiar with coding in C# at the moment so I don’t trust myself to write an example code, but I encourage you to check the documentation and tutorial:

http://unity3d.com/learn/tutorials/modules/intermediate/scripting/coroutines

For non constant time events you should use coroutines.
This should start you going. This will rotate the mesh infinitely.

private var isRotating:boolean = false;

function Update (){
    if(Input.GetKeyDown("r")){
        if(!isRotating){
            isRotating = true;
            RotateObject();
        }
    }
}


function RotateObject() {
    while(true){
        transform.RotateAround(Vector3.zero, Vector3(0,0,1), 90 * Time.deltaTime);
        yield;
    }
}