协程方法的开启、关闭以及传参

协程方法的开启、关闭都是由对象完成的,所以我们在开启、关闭时都需要弄清楚对象,否则很容易出现协程打不开,或者关不掉的情况。

协程方法的开启、关闭方法1:用字符串打开,用字符串关闭,如果需要传递参数,可以在字符串后面写参数,但是参数个数只能为1。

 1 public class Test
 2 {
 3     private void Start()
 4     {
 5         this.StartCoroutine("IEDo");//开启
 6         this.StartCoroutine("IEDo1", 1);//开启并传参
 7         this.StopCoroutine("IEDo");//关闭
 8         this.StopCoroutine("IEDo1");//关闭
 9     }
10 
11     IEnumerator IEDo()
12     {
13         yield return null;
14     }
15 
16     IEnumerator IEDo1(int a)
17     {
18         yield return null;
19     }
20 }

协程方法的开启、关闭方法2:用方法名打开协程,但关闭时会稍微麻烦点,如下图所示,通过打开时的返回值去关闭。

 1 public class Test : Base
 2 {
 3     private void Start()
 4     {
 5         Coroutine cc = this.StartCoroutine(IEDo());//开启
 6         this.StopCoroutine(cc);//关闭
 7     }
 8 
 9     IEnumerator IEDo()
10     {
11         yield return null;
12     }
13 }

协程方法的开启、关闭方法3:在协程方法中设置一个特定的条件,当这个条件满足时,用 break 或者 yield break 让协程自己关闭。

 1 public class Test : Base
 2 {
 3     private bool val;
 4 
 5     private void Start()
 6     {
 7         this.StartCoroutine("IEDo");//开启
 8     }
 9 
10     IEnumerator IEDo()
11     {
12         while (true)
13         {
14             yield return null;
15             if (val)
16             {
17                 //当布尔值 val 为真时,使用 break 或者 yield break 让协程自己关闭。
18                 //break;
19                 yield break;
20             }
21         }
22     }
另外需要注意: StopAllCoroutines() 这个方法也仅仅只能关闭调用这个方法的对象身上的所有协程,而不能关闭其他对象身上的协程。
原文地址:https://www.cnblogs.com/xiaoyulong/p/7895196.html