Suggest a change
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close
Sumbission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close
Switch to Manual
public function
StartCoroutine(
routine:
IEnumerator):
Coroutine;
public
Coroutine StartCoroutine(IEnumerator
routine);
public
def
StartCoroutine(
routine as IEnumerator)
as
Coroutine
Description
Starts a coroutine.
The execution of a coroutine can be paused at any point using the yield statement.
The yield return value specifies when the coroutine is resumed.
Coroutines are excellent when modelling behaviour over several frames.
Coroutines have virtually no performance overhead.
StartCoroutine function always returns immediately, however you can yield the result.
This will wait until the coroutine has finished execution.
When using JavaScript it is not necessary to use StartCoroutine, the compiler will do this for you.
When writing C# code you must call StartCoroutine.
// In this example we show how to invoke a coroutine and continue executing
// the function in parallel. function Start() {
// - After 0 seconds, prints "Starting 0.0"
// - After 0 seconds, prints "Before WaitAndPrint Finishes 0.0"
// - After 2 seconds, prints "WaitAndPrint 2.0"
print ("Starting " + Time.time);
// Start function WaitAndPrint as a coroutine. And continue execution while it is running
// this is the same as WaitAndPrint(2.0) as the compiler does it for you automatically
StartCoroutine(WaitAndPrint(2.0));
print ("Before WaitAndPrint Finishes " + Time.time);
} function WaitAndPrint (waitTime : float) {
// suspend execution for waitTime seconds
yield WaitForSeconds (waitTime);
print ("WaitAndPrint "+ Time.time);
}
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Start() {
print("Starting " + Time.time);
StartCoroutine(WaitAndPrint(2.0F));
print("Before WaitAndPrint Finishes " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime) {
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
}
import UnityEngine
import System.Collections
public class ExampleClass(MonoBehaviour):
def Start() as void:
print(('Starting ' + Time.time))
StartCoroutine(WaitAndPrint(2.0F))
print(('Before WaitAndPrint Finishes ' + Time.time))
def WaitAndPrint(waitTime as float) as IEnumerator:
yield WaitForSeconds(waitTime)
print(('WaitAndPrint ' + Time.time))
// In this example we show how to invoke a coroutine and wait until it
// is completed
function Start() {
// - After 0 seconds, prints "Starting 0.0"
// - After 2 seconds, prints "WaitAndPrint 2.0"
// - After 2 seconds, prints "Done 2.0"
print ("Starting " + Time.time);
// Start function WaitAndPrint as a coroutine. And wait until it is completed.
// the same as yield WaitAndPrint(2.0);
yield StartCoroutine(WaitAndPrint(2.0));
print ("Done " + Time.time);
} function WaitAndPrint (waitTime : float) {
// suspend execution for waitTime seconds
yield WaitForSeconds (waitTime);
print ("WaitAndPrint "+ Time.time);
}
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
IEnumerator Start() {
print("Starting " + Time.time);
yield return StartCoroutine(WaitAndPrint(2.0F));
print("Done " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime) {
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
}
import UnityEngine
import System.Collections
public class ExampleClass(MonoBehaviour):
def Start() as IEnumerator:
print(('Starting ' + Time.time))
yield StartCoroutine(WaitAndPrint(2.0F))
print(('Done ' + Time.time))
def WaitAndPrint(waitTime as float) as IEnumerator:
yield WaitForSeconds(waitTime)
print(('WaitAndPrint ' + Time.time))
public function
StartCoroutine(
methodName:
string,
value: object = null):
Coroutine;
public
Coroutine StartCoroutine(string
methodName,
object
value = null);
public
def
StartCoroutine(
methodName as string,
value as object = null)
as
Coroutine
Description
Starts a coroutine named methodName
.
In most cases you want to use the StartCoroutine variation above.
However StartCoroutine using a string method name allows you to use StopCoroutine with a specific method name.
The downside is that the string version has a higher runtime overhead to start the coroutine and you can pass only one parameter.
// In this example we show how to invoke a coroutine using a string name and stop it function Start () {
StartCoroutine("DoSomething", 2.0);
yield WaitForSeconds(1);
StopCoroutine("DoSomething");
} function DoSomething (someParameter : float) {
while (true) {
print("DoSomething Loop");
// Yield execution of this coroutine and return to the main loop until next frame
yield;
}
}
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
IEnumerator Start() {
StartCoroutine("DoSomething", 2.0F);
yield return new WaitForSeconds(1);
StopCoroutine("DoSomething");
}
IEnumerator DoSomething(float someParameter) {
while (true) {
print("DoSomething Loop");
yield return null;
}
}
}
import UnityEngine
import System.Collections
public class ExampleClass(MonoBehaviour):
def Start() as IEnumerator:
StartCoroutine('DoSomething', 2.0F)
yield WaitForSeconds(1)
StopCoroutine('DoSomething')
def DoSomething(someParameter as float) as IEnumerator:
while true:
print('DoSomething Loop')
yield