methodName | 协同程序的名称。 |
routine | 代码中函数的名称,包括协同程序。 |
停止在该行为上运行的第一个名为 methodName
的协同程序或存储在 routine
中的协同程序。
StopCoroutine 接受以下三个参数(用于指定要停止的协同程序)之一:
- 一个字符串函数,用于命名激活的协同程序
- 之前用于创建该协同程序的 IEnumerator
变量。
- 一个 /Coroutine/,用于停止手动创建的 /Coroutine/。
注意:不要混淆三个参数。
如果使用了字符串作为 StartCoroutine 中的参数,请在 StopCoroutine 中使用该字符串。
同样,在 StartCoroutine 和 StopCoroutine 中使用相同的 StopCoroutine
。
最后才为 StopCoroutine
使用创建时使用的 /Coroutine/。
In the JScript example that follows, the string example is provided. In the CS example, the IEnumerator type is used.
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);
}
}
}
下面的 cs 示例演示如何使用 StopCoroutine(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;
}
// handling exit of the coroutine
// coroutineA() shuts this down too early
float t = Time.time - start;
Debug.Log("coroutineB() finished " + t);
yield return null;
}
}