Unity 协程停不了?
2024-10-18 10:48:21
你是不是遇到过协程停不了的情况?你是直接调用IEnumerator方法,如下?
void Start () {
StartCoroutine(IETest01());
StartCoroutine(IETest02());
} IEnumerator IETest01()
{
Debug.LogError("IETest01");
yield return new WaitForSeconds();
StopCoroutine(IETest02());
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}
不是协程停不了,是处理的方式不对。上面代码StopCoroutine(IETest02());相当于再调用了一次IETest02方法,和第一次调用StartCoroutine(IETest02());时返回的并不是同一个值。这里很好理解,普通的方法,多次调用,返回的值也不会指向同一段地址。
那么正确的方法应该怎么做呢?下面有三种参考方法:
1、通过函数名字符串
void Start () {
StartCoroutine("IETest01");
StartCoroutine("IETest02");
} IEnumerator IETest01()
{
Debug.LogError("IETest01");
yield return new WaitForSeconds();
StopCoroutine("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}
2、把返回值(IEnumerator )保存下来
IEnumerator ie1;
IEnumerator ie2;
void Start () {
ie1 = IETest01();
ie2 = IETest02();
StartCoroutine(ie1);
StartCoroutine(ie2);
} IEnumerator IETest01()
{
Debug.LogError("IETest01");
yield return new WaitForSeconds();
StopCoroutine(ie2);
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}
后面两段代码执行不会打印"IETest02 end",协程中断成功
3、把StartCoroutine方法的返回值(Coroutine)保存起来
Coroutine c1, c2; void Start()
{
c1 = StartCoroutine(IETest01());
c2 = StartCoroutine(IETest02());
} IEnumerator IETest01(int v)
{
Debug.LogError("IETest01:" + v);
yield return new WaitForSeconds();
StopCoroutine(c1);
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}
最新文章
- Vue.js 整理笔记
- 打造AngularJs2.0开发环境
- Java计算上下基线
- Quagga服务器安装和配置
- SharpGL学习笔记(十七) 立体文字和平面文字
- C++11笔记
- 【转】Xcode7真机调试iOS应用程序
- BZOJ 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛( set )
- OPatch cannot find a valid oraInst.loc file to locate Central Inventory
- 20165304实验一java开发环境熟悉
- [Asp.net core]封装Layer ui checkbox 为taghelper
- jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行
- 复杂sql语句:按部门统计人数
- anu - component
- 利用saltstack一键部署多台zookeeper
- MongoDB ShardingCluster
- tyvj 1031 热浪 最短路
- 【RF库Collections测试】Convert To List
- Spring 跨域请求
- Storm集群部署及单词技术