协程学习记录
unity中的相关使用和理解
一些要点记录
1.yield return 0或null:告诉协程等待下一帧,直到继续执行为止。下一帧还是从这里开始
2.协程里面一段循环,一直yield return 0.直接可以使用为等待一段时间。
3.协程的嵌套使用,很有现实意义。尝试多实践观察。
重要作用
1.协程会对里面变量状态进行记录
IEnumerator CountSeconds()
{
int seconds = 0;
int int_for = 0;
while(true) //一直循环着,所以for循环结束,会保存
{
//在这个大块while中, 先执行此部分,结束以后再是seconds.从整体来看,
//整段代码持续执行,不管是在哪一帧输出,执行
//yield只是控制执行的时机而已。
for (float timer = 0; timer < 1; timer += 0.1f)//Time.deltaTime)
{
int_for++;
Debug.Log(int_for + " int_for value.");
Debug.Log(timer + " timer value.");
yield return 0;
}
seconds++; //表明该方法的状态被存储了,即使上一部分
Debug.Log(seconds +" seconds have passed since the Coroutine started.");
}
}
具体使用
1.特定使用:
IEnumerator Wait(float duration)
{
for(float timer = 0; timer < duration; timer += Time.deltaTime)
Yield return 0;
}
本协程函数用于等待一段时间,在协程嵌套使用时,yield return StartCoroutine(Wait())
使用其等待一段时间
2.具体控制对象行为:
运动到某一位置:在特定状态下,执行运动函数;
按指定路径前进:循环状态下,对位置序列进行遍历运动(主要判断条件和循环逻辑处理好)
注意事项
-终止协程StopCoroutine(),只能终止以字符串形式启动的协程;StopAllCoroutine()终止此脚本所有协程?
-多协程可以同时运行,按照各自启动顺序更新;可嵌套;多脚本访问一个协程,定义静态协程
-协程不是多线程!运行在同一线程,和普通脚本一样
参考来源 https://blog.csdn.net/huang9012/article/details/38492937