当前位置:   article > 正文

Unity协程的作用_unity携程的作用

unity携程的作用

1. 协程不是多线程!!! 协程还是在主线程里面,这点十分重要,不要被网上其他资料误导。

2. 协程不是只能做简单的延迟,虽然你可能用过下面的延迟几秒的代码,但是协程的价值在这里完全体现不出来。

  1. void Start()
  2. {
  3. StartCoroutine(coRoutine());
  4. }
  5. IEnumerator coRoutine()
  6. {
  7. yield return new WaitForSeconds(1);
  8. }

因为其实这种只是暂停几秒,完全没必要单独开一个协程,下面这种方法也可以实现

  1. IEnumerator Start () {
  2. // StartCoroutine(coRoutine());
  3. Debug.Log("1");
  4. yield return new WaitForSeconds(3);
  5. Debug.Log("2");
  6. }

是不是很意外,start竟然也可以return,当然一般不这么做,这个例子只是为了说明协程不只是用来做延迟的


3. 协程的真正用途是分步做一个比较耗时的事情,比如游戏里面的加载资源

  1. private int num = 0;
  2. private const int total=30;
  3. void Start()
  4. {
  5. StartCoroutine(coRoutine());
  6. }
  7. IEnumerator coRoutine()
  8. {
  9. while (num<total)
  10. {
  11. num++;
  12. Debug.Log(num);
  13. yield return null;
  14. }
  15. }
  16. void Update () {
  17. Debug.Log("update!");
  18. }
  19. void LateUpdate()
  20. {
  21. Debug.Log("lateUpdate!");
  22. }

上面的代码是个简单的例子,比如我们加载的资源有30个(total),但是一次加载完毕会耗费大量的时间,不可能让玩家在start中等待这么久,这时候协程的作用就出现了,协程是每帧lateUpdate之前执行yield return之前的代码,lateupdate之后执行yield return之后的代码,相当于每帧循环一次(前提是你的协程有循环体,否则一帧就执行完了),具体可以复制我的代码看一下日志,这样就不会卡在这加载30个资源这里,而是你在update里面继续做你的事情,我每次只加载1个,加载1个耗时显然远远小于30个。


上面的例子具体可以对应进入一张地图加载NPC,当你进入一张地图后,如果一次性加载30个NPC,你可能就卡在进地图的地方,等待这30个NPC全部加载出来之后才能行动,但是用了协程,你可以移动,可能你移动一步(或者几步),加载一个NPC,实际上你根本体会不到移动过程中有停顿的现象。



转载地址:https://www.cnblogs.com/InitialD/p/7348875.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/235924
推荐阅读
相关标签
  

闽ICP备14008679号