赞
踩
目录
1.1 想知道:Unity中协程(IEnumerator)的使用方法介绍
2.1 Unity中协程(IEnumerator)的使用方法介绍
2.3 Unity 协程之三种分析解决StopCorotine终止不了
3.1 物体隐藏时候,协程关闭了,所以物体隐藏时候需要注意协程的开关
3.2 如操作3:协程start前需要判断其是否开启了,否则协程会不断地叠加(即:开启协程前,将之前已经开启的给关闭)
3.4 使用此方法可以开启、关闭线程(比输入字符串函数比较好,因为可以搜到那些地方调用了此协程)
四.操作:3:协程start前需要判断其是否开启了,否则协程会不断地叠加
1.错误的演示一遍:当我按下多次R按键,会发现Cube运行的越来越快
1.1 运行结果:当我不断按下R按键,cube会移动的越来越快,
1.正确的演示:弄一个bool变量控制协程是否已经开启了(因为查阅API,发现协程没有提供是否正在运行的变量,所以只好自己创建一个变量)
四.操作:4:StopCoroutine(ie_StopRecorder)不如 StopCoroutine("IE_StopRecorder")
1.StopCoroutine(ie_StopRecorder)发现没有执行协程
1.StopCoroutine("IE_StopRecorder")发现可以执行协程
Unity中协程(IEnumerator)的使用方法介绍_悲欢离合的博客-CSDN博客
- 总结:good:适合多看
Unity3D协程介绍 以及 使用_huang9012的专栏-CSDN博客_unity 协程
- 总结:good:适合多看
https://jingyan.baidu.com/article/7c6fb428c8478480642c9029.html
亲测:StartCoroutine(Func()),StopCoroutine(Func())的方法无法关闭协程- 亲测:StartCoroutine(“FuncName”),StopCoroutine("FuncName") 能够关闭协程
亲测:IEnumerator wrapFunc,包装一下协程函数,StartCoroutine(wrapFunc),StopCoroutine(wrapFunc) 能够关闭协程(项目有此发现无法关闭,所有不推荐使用)- 亲测:使用此方法可以开启、关闭线程(比输入字符串函数比较好,因为可以搜到那些地方调用了此协程)
private Coroutine coroutine_setReConnect; if (coroutine_setReConnect != null) { StopCoroutine(coroutine_setReConnect); coroutine_setReConnect = null; } coroutine_setReConnect = StartCoroutine(IE_SetReConnect());
- 亲测:使用此方法可以开启、关闭线程(比输入字符串函数比较好,因为可以搜到那些地方调用了此协程)
private Coroutine coroutine_setReConnect; if (coroutine_setReConnect != null) { StopCoroutine(coroutine_setReConnect); coroutine_setReConnect = null; } coroutine_setReConnect = StartCoroutine(IE_SetReConnect());
- using System.Collections;
- using UnityEngine;
-
- public class IEnumeratorTest: MonoBehaviour
- {
-
- /// <summary>定义一个全局的对象用来接收协程的返回值</summary>
- IEnumerator ie;
-
- void Start()
- {
- ie = Test(5, "hello");
-
- StartCoroutine(ie);
-
- //使用方法名,并且带有一个参数(最多只能传一个参数)
- StartCoroutine("Test1", 0);
- }
-
- void Update()
- {
- if(Input.GetKeyDown(KeyCode.Space))
- {
- StopCoroutine(ie);
- StopCoroutine("Test1");
- }
- }
-
- IEnumerator Test(int a,string str)
- {
- WaitForSeconds sec = new WaitForSeconds(1f);
-
- while(true)
- {
- Debug.Log(a);
- Debug.Log(str);
- yield return new sec;
- }
- }
-
- IEnumerator Test1(int a)
- {
- WaitForSeconds sec = new WaitForSeconds(1f);
- while(true)
- {
- Debug.Log(a);
- yield return new sec;
- }
- }
- }
-

StartCoroutine("StopRecorder");
- IEnumerator StopRecorder()
- {
- yield return new WaitForSeconds(5f);
- //TODO:添加需要执行的动作
-
- }
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- /// <summary>
- /// 功能:测试协程停止会不会对之前的协程造成影响
- /// </summary>
- public class MyCoroutineTest : MonoBehaviour
- {
- public GameObject obj_cube;
-
- // Start is called before the first frame update
- void Start()
- {
- }
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyUp(KeyCode.Space))
- {
- StopCoroutine("Coroutine");
- //print("StopCoroutine");
- }
- else if (Input.GetKeyUp(KeyCode.R))
- {
- StartCoroutine("Coroutine");
- //print("StartCoroutine");
- }
- }
-
- //测试发现:不断的按下R,开启协程,导致cube移动越来越快
- IEnumerator Coroutine()
- {
- while (true)
- {
- yield return new WaitForSeconds(0.8f);
-
- Vector3 v3 = obj_cube.transform.position;
- obj_cube.transform.position = new Vector3(v3.x + 1, v3.y, v3.z);
- }
-
- }
- }

- 协程不断的StartCoroutine会导致物体越来越快,所以一定要StartCoroutine前StopCoroutine
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- /// <summary>
- /// 功能:测试协程停止会不会对之前的协程造成影响
- /// </summary>
- public class MyCoroutineTest : MonoBehaviour
- {
- /// <summary>GameObject:测试移动的cube</summary>
- public GameObject obj_cube;
-
- /// <summary>bool:协程是否开始运行</summary>
- private bool bIsStartCoroutine;
-
- // Start is called before the first frame update
- void Start()
- {
- bIsStartCoroutine = false;
- }
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyUp(KeyCode.Space))
- {
- if (bIsStartCoroutine)
- {
- bIsStartCoroutine = false;
- StopCoroutine("Coroutine");
- print("StopCoroutine");
- }
- }
- else if (Input.GetKeyUp(KeyCode.R))
- {
- if (!bIsStartCoroutine)
- {
- bIsStartCoroutine = true;
- StartCoroutine("Coroutine");
- print("StartCoroutine");
- }
- }
- }
-
- 测试发现:不断的按下R,开启协程,导致cube移动越来越快
- //IEnumerator Coroutine()
- //{
- // while (true)
- // {
- // yield return new WaitForSeconds(0.8f);
-
- // Vector3 v3 = obj_cube.transform.position;
- // obj_cube.transform.position = new Vector3(v3.x + 1, v3.y, v3.z);
- // }
- //}
-
- //测试发现:
- IEnumerator Coroutine()
- {
- while (true)
- {
- yield return new WaitForSeconds(0.8f);
-
- Vector3 v3 = obj_cube.transform.position;
- obj_cube.transform.position = new Vector3(v3.x + 1, v3.y, v3.z);
- }
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。