协程及异步加载资源场景

同步加载以及异步加载

  • 协程
    • 协程与多线程的区别
    • 协程的开启
    • 协程函数的定义
  • 资源
    • 资源的同步加载
    • 资源的异步加载
  • 场景
    • 场景的同步加载
    • 场景的异步加载

同步加载:在主线程中进行加载
异步加载:单独开辟一个加载的线程用来加载资源,不影响主线程的进行

协程

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

协程与多线程的区别

Unity中虽然可以开启线程但是不能直接调用Unity中大部分的Api,协程可以代替线程,但协程不是多线程,只是在模拟多线程。
在多处理器下,从概念上来讲,多线程程序同时运行多个线程,而在任意时刻只有一个协程在运行

协程的开启

StartCoroutine(“协程函数名”,参数);
StartCoroutine(函数(参数));

协程函数的定义

返回值必须是IEnumerator接口类型的;
程序必须有yield return ;
协程中可以有参数;
协程函数运行先运行yield return之前的代码,之后跳转出该程序,直到等待条件满足,再跳转回来执行yield return之后的代码。
private IEnumerator Test()
{
yield return 等待条件;
Print(“等待时间结束”);
}
协程函数中yield return 后跟的是等待条件
yield return null 等待一帧;
yield return WaitForSeconds(时间) 等待秒数;
yield break 直接跳出协程;
yield return 对象 等待某个对象完成某种操作,如加载资源,场景

资源

资源的同步加载

Resources.Load<类型>(“相对路径”);
使用Resources.Load进行加载的时候如果加载的资源过大,因为在同一线程内进行加载,所以在加载没完成之前不会进行以后的代码。所以程序会直接卡住。

资源的异步加载

Resources.LoadAsync<类型>(“相对路径”);
配合协程可以进行异步加载资源
IEnumerator LoadResources()
{
ResourceRequest rr = Resources.LoadAsync("");
yield return rr;
}
该程序可以异步加载资源,ResourceRequest参数中是资源加载过程中的信息,例如加载是否完成

场景

场景的同步加载

SceneManager.LoadScene(“场景名”);
SceneManager.LoadScene(场景索引);
如果要加载的场景太大的话,程序会卡顿,在玩的游戏中加载场景时会有一个加载场景进度条,如果在同一程序中加载场景就不能显示加载进度。所以要用异步加载。

场景的异步加载

AsyncOperation 加载过程中的一些参数。
allowSceneActivation:场景加载完是否要直接跳转。
isDone:加载完场景并且启用才设置为true
progress:这个是加载进度,利用这个就可以实现进度条。当allowSceneActivation为true 时进度最高位1;当allowSceneActivation为false时进度最高就到0.9,或许是因为没有启用总差一点把
协程及异步加载资源场景_第1张图片
异步加载的实现
协程及异步加载资源场景_第2张图片

你可能感兴趣的:(unity,unity3d)