栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity协程相关

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity协程相关

目录

1. Unity是否支持多线程

2. Unity多线程的常用用法:

3. 什么是协程:

4. 协程和多线程的区别:

5. 协程函数的使用:

6.yield return 

7. 协程受挂载对象和脚本失活销毁的影响:


1. Unity是否支持多线程

        Unity支持多线程, 但是开的线程不能访问Unity相关对象的内容. 包括Unity中的所有方法.

        Unity中, 自己新开的线程要主动销毁(一般写在OnDestory生命周期函数中 thread.Abort()). 否则新线程将和Unity编辑器共同存在, 直到关闭Unity编辑器.

2. Unity多线程的常用用法:

        一般将可能造成卡顿的复杂算法或网络相关的代码让副线程执行. 将计算的结果存放在一个公共内存块中(比如Queue), 主线程从这个公共内存块中获取数据(if (queue.Count > 0)).

3. 什么是协程:

        协同程序是一种分时分步执行的特殊函数. 本质是迭代器.

        主要应用场景有: 异步加载文件, 异步下载文件, 场景异步加载, 批量创建时防卡顿.

4. 协程和多线程的区别:

        多线程是一根独立的管道, 和主线程并行执行.

        协程在主线程之上, 分时分步执行.

 多线程

 协程

5. 协程函数的使用:

        继承MonoBehaviour的类都可以开启协程.

        定义:

                两个关键点: 1. 方法返回类型是IEnumerator及其实现类 2. 使用yield return返回

// 协程函数定义
IEnumerator MyCoroutine(string str1, string str2)
{
    // 进入协程函数后立即打印str1
    print(str1);
    // 协程挂起, 等待5S后继续执行
    yield return new WaitForSeconds(5f);
    print(str2);
}

        开启:

                调用MonoBehaviour类中的公共方法StartCoroutine(IEnumerator ie).

// Start生命周期函数
void Start()
{
    // StartCoroutine返回值为Coroutine
    // 最好用一个Coroutine变量接受返回值, 用来关闭指定协程函数
    Coroutine myCoroutine = StartCoroutine(MyCoroutine("pungn", "2333"));
}

        关闭: 

                关闭所有协程函数: StopAllCoroutines();

                关闭指定协程函数: StopCoroutine(Coroutine coroutine);

void Start()
{
    // 关闭所有协程函数
    //StopAllCoroutines();
    // 通过变量名关闭指定协程函数
    StopCoroutine(myCoroutine);
}

        

6.yield return 

  • yield return 任意数字;

        yield return null;

        下一帧执行. 在Update和LateUpdate之间执行.

  • yield return new WaitForSeconds(float 秒数);

        等待...秒后执行. 在Update和LateUpdate之间执行.

  • yield return new WaitForFixedUpdate();

        下个固定物理帧更新时执行. 在FixedUpdate和碰撞检测相关函数后执行.

  • yield return new WaitForEndOfFrame();

        在摄像机和GUI的相关渲染完成后执行, 截图功能通常使用. 在LateUpdate和之后的渲染相关处理完毕后执行.        

  • yield break

        跳出协程 在跳出协程之后, 保存协程变量的参数会变成null.

7. 协程受挂载对象和脚本失活销毁的影响:

        1.当挂载对象和脚本销毁后, 协程不执行

        2.当挂载对象失活时, 协程不执行

        3.当只有脚本失活时, 协程继续执行

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号