zoukankan      html  css  js  c++  java
  • 第34天协同程序和异步加载

    协同程序

    概念

    在主程序运行的同时开启另一段逻辑处理,来协同当前程序的执行。

    协同程序(coroutine)与多线程情况下的线程比较类似:有自己的堆栈,自己的局部变量,但与其它协同程序共享全局变量等很多信息。

    协程和多线程

    协程不是多线程只是在模拟多线程

    线程和协同程序的主要不同在于:在多处理器情况下,从概念上来讲多线程程序同时运行多个线程。

    而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行

    Unity是否支持多线程

    Unity可以开启多线程

    但是在Unity中多线程不能使用渲染内容的API,比如修改坐标,修改文本内容等

    开启协程

    函数必须是协程函数

    定义协程函数

    返回值必须是IEnumerator

    函数中必须有yield return或yield break

    协同程序可以有参数

    StartCoroutine("PrintA",4);

    StartCoroutine(PrintA(4));(不建议使用,因为指定名称停止程序的方法不能用在该方法上)

    IEnumerator ie = PrintA();---StartCoroutine(ie);

    协程的运行影响

    当脚本失活,协程继续运行

    当物体失活,协程停止运行

    当脚本或物体被删除的时候,协程停止运行

    关闭协程

    StopCoroutine()关闭指定协程

    StopAllCoroutines()关闭所有协程

    注意:无法使用StopCoroutine关闭StartCoroutine(PrintA(4));

    yield

    return null:等待一帧

    yield return new WaitForSeconds(5):等待5秒

    yield break 直接跳出协程

    yield return 对象:等待某个对象完成某种操作,如下载,场景加载等

    资源异步加载

    Profiler:性能分析工具

    卸载资源

    Resouces.UnloadAsset()卸载指定资源:使用中的资源不能卸载 (通常不用)

    Resouces.UnloadUnuserAssets():卸载所有未使用资源(切换场景时,默默卸载掉上一场景资源)

    异步加载

    Resources.LoadAsync

    异步加载场景

    SceneManager.LoadAsync(场景名字)

    SceneManager.LoadAsync(场景索引)

    AsyncOperation

    异步加载过程中的信息

    allowSceneActivation

    场景加载完成后是否直接显示

    isDone

    加载完场景并且已经启用才为true

    progress

    allowSceneActivation=true 进度最高到1

    allowSceneActivation=false 时 进度最高到0.9

  • 相关阅读:
    新人手册
    使用koa-mysql-session时报错
    自建windows服务器如何部署egg应用
    mac os 10.15 virtualBox6.0.12崩溃
    thinkphp3.2 上传图片兼容小程序
    PHP版本微信支付开发
    php mysql 按照指定年月查找数据 数据库create_time为时间戳
    Mac OS 查看端口和杀死进程
    MAC PHP7 如何disable xdebug
    TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
  • 原文地址:https://www.cnblogs.com/yifengs/p/14237602.html
Copyright © 2011-2022 走看看