StopCoroutine
Stops the first coroutine named methodName, or the coroutine stored in routine running on this behaviour.
Read time 6 minutesLast updated 6 days ago
Definition
- Type: Method
- Namespace: UnityEngine
- Assembly: UnityEngine.CoreModule
StopCoroutine(IEnumerator)
Stops the first coroutine named methodName, or the coroutine stored in routine running on this behaviour.
public 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 methodName, or the coroutine stored in routine running on this behaviour.
public 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 methodName, or the coroutine stored in routine running on this behaviour.
public 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; }}