StopCoroutine
Stops the first coroutine named methodName, or the coroutine stored in routine running on this behaviour.
Read time 6 minutesLast updated 5 days ago
Definition
- Type: Method
- Namespace: UnityEngine
- Assembly: UnityEngine.CoreModule
StopCoroutine(IEnumerator)
Stops the first coroutine named , or the coroutine stored in running on this behaviour.
methodNameroutinepublic void StopCoroutine(IEnumerator routine)
Parameters
Name of the function in code, including coroutines.
Remarks
StopCoroutine- A string function naming the active coroutine.
- The variable used earlier to create the coroutine.
IEnumerator - The to stop the manually created
Coroutine.Coroutine
You must use the same parameter type to stop a coroutine with as was used to start it with MonoBehaviour.StartCoroutine.
StopCoroutineCoroutines also stop if:
- The value of GameObject.activeSelf becomes for the GameObject the script is attached to.
false - The MonoBehaviour script is destroyed with a call to Object.Destroy.
Note: Disabling the MonoBehaviour script by setting Behaviour.enabled to doesn't stop coroutines.
falseStopCoroutine(null)StopCoroutineThe following example uses the IEnumerator to stop a coroutine.
using UnityEngine;using System.Collections;public class Example : MonoBehaviour{ // keep a copy of the executing script private IEnumerator coroutine; // Use this for initialization void Start() { print("Starting " + Time.time); coroutine = WaitAndPrint(3.0f); StartCoroutine(coroutine); print("Done " + Time.time); } // print to the console every 3 seconds. // yield is causing WaitAndPrint to pause every 3 seconds public IEnumerator WaitAndPrint(float waitTime) { while (true) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } void Update() { if (Input.GetKeyDown("space")) { StopCoroutine(coroutine); print("Stopped " + Time.time); } }}
The following example uses the Coroutine parameter to stop a coroutine.
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ExampleClass : MonoBehaviour{ void Start() { StartCoroutine(coroutineA()); } IEnumerator coroutineA() { // wait for 1 second yield return new WaitForSeconds(1.0f); Debug.Log("coroutineA() started: " + Time.time); // wait for another 1 second and then create b yield return new WaitForSeconds(1.0f); Coroutine b = StartCoroutine(coroutineB()); yield return new WaitForSeconds(2.0f); Debug.Log("coroutineA() finished " + Time.time); // B() was expected to run for 10 seconds // but was shut down here after 3.0f StopCoroutine(b); yield return null; } IEnumerator coroutineB() { float f = 0.0f; float start = Time.time; Debug.Log("coroutineB() started " + start); while (f < 10.0f) { Debug.Log("coroutineB(): " + f); yield return new WaitForSeconds(1.0f); f = f + 1.0f; } // Intended to handling exit of the this coroutine. // However coroutineA() shuts coroutineB() down. This // means the following lines are not called. float t = Time.time - start; Debug.Log("coroutineB() finished " + t); yield return null; }}
StopCoroutine(Coroutine)
Stops the first coroutine named , or the coroutine stored in running on this behaviour.
methodNameroutinepublic void StopCoroutine(Coroutine routine)
Parameters
Name of the function in code, including coroutines.
Remarks
StopCoroutine- A string function naming the active coroutine.
- The variable used earlier to create the coroutine.
IEnumerator - The to stop the manually created
Coroutine.Coroutine
You must use the same parameter type to stop a coroutine with as was used to start it with MonoBehaviour.StartCoroutine.
StopCoroutineCoroutines also stop if:
- The value of GameObject.activeSelf becomes for the GameObject the script is attached to.
false - The MonoBehaviour script is destroyed with a call to Object.Destroy.
Note: Disabling the MonoBehaviour script by setting Behaviour.enabled to doesn't stop coroutines.
falseStopCoroutine(null)StopCoroutineThe following example uses the IEnumerator to stop a coroutine.
using UnityEngine;using System.Collections;public class Example : MonoBehaviour{ // keep a copy of the executing script private IEnumerator coroutine; // Use this for initialization void Start() { print("Starting " + Time.time); coroutine = WaitAndPrint(3.0f); StartCoroutine(coroutine); print("Done " + Time.time); } // print to the console every 3 seconds. // yield is causing WaitAndPrint to pause every 3 seconds public IEnumerator WaitAndPrint(float waitTime) { while (true) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } void Update() { if (Input.GetKeyDown("space")) { StopCoroutine(coroutine); print("Stopped " + Time.time); } }}
The following example uses the Coroutine parameter to stop a coroutine.
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ExampleClass : MonoBehaviour{ void Start() { StartCoroutine(coroutineA()); } IEnumerator coroutineA() { // wait for 1 second yield return new WaitForSeconds(1.0f); Debug.Log("coroutineA() started: " + Time.time); // wait for another 1 second and then create b yield return new WaitForSeconds(1.0f); Coroutine b = StartCoroutine(coroutineB()); yield return new WaitForSeconds(2.0f); Debug.Log("coroutineA() finished " + Time.time); // B() was expected to run for 10 seconds // but was shut down here after 3.0f StopCoroutine(b); yield return null; } IEnumerator coroutineB() { float f = 0.0f; float start = Time.time; Debug.Log("coroutineB() started " + start); while (f < 10.0f) { Debug.Log("coroutineB(): " + f); yield return new WaitForSeconds(1.0f); f = f + 1.0f; } // Intended to handling exit of the this coroutine. // However coroutineA() shuts coroutineB() down. This // means the following lines are not called. float t = Time.time - start; Debug.Log("coroutineB() finished " + t); yield return null; }}
StopCoroutine(string)
Stops the first coroutine named , or the coroutine stored in running on this behaviour.
methodNameroutinepublic void StopCoroutine(string methodName)
Parameters
Name of coroutine.
Remarks
StopCoroutine- A string function naming the active coroutine.
- The variable used earlier to create the coroutine.
IEnumerator - The to stop the manually created
Coroutine.Coroutine
You must use the same parameter type to stop a coroutine with as was used to start it with MonoBehaviour.StartCoroutine.
StopCoroutineCoroutines also stop if:
- The value of GameObject.activeSelf becomes for the GameObject the script is attached to.
false - The MonoBehaviour script is destroyed with a call to Object.Destroy.
Note: Disabling the MonoBehaviour script by setting Behaviour.enabled to doesn't stop coroutines.
falseStopCoroutine(null)StopCoroutineThe following example uses the IEnumerator to stop a coroutine.
using UnityEngine;using System.Collections;public class Example : MonoBehaviour{ // keep a copy of the executing script private IEnumerator coroutine; // Use this for initialization void Start() { print("Starting " + Time.time); coroutine = WaitAndPrint(3.0f); StartCoroutine(coroutine); print("Done " + Time.time); } // print to the console every 3 seconds. // yield is causing WaitAndPrint to pause every 3 seconds public IEnumerator WaitAndPrint(float waitTime) { while (true) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } void Update() { if (Input.GetKeyDown("space")) { StopCoroutine(coroutine); print("Stopped " + Time.time); } }}
The following example uses the Coroutine parameter to stop a coroutine.
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ExampleClass : MonoBehaviour{ void Start() { StartCoroutine(coroutineA()); } IEnumerator coroutineA() { // wait for 1 second yield return new WaitForSeconds(1.0f); Debug.Log("coroutineA() started: " + Time.time); // wait for another 1 second and then create b yield return new WaitForSeconds(1.0f); Coroutine b = StartCoroutine(coroutineB()); yield return new WaitForSeconds(2.0f); Debug.Log("coroutineA() finished " + Time.time); // B() was expected to run for 10 seconds // but was shut down here after 3.0f StopCoroutine(b); yield return null; } IEnumerator coroutineB() { float f = 0.0f; float start = Time.time; Debug.Log("coroutineB() started " + start); while (f < 10.0f) { Debug.Log("coroutineB(): " + f); yield return new WaitForSeconds(1.0f); f = f + 1.0f; } // Intended to handling exit of the this coroutine. // However coroutineA() shuts coroutineB() down. This // means the following lines are not called. float t = Time.time - start; Debug.Log("coroutineB() finished " + t); yield return null; }}