请选择 进入手机版 | 继续访问电脑版

协程及异步加载资源场景

[复制链接]
冰宇 发表于 2021-1-1 17:45:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
同步加载以及异步加载



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

协程是在主线程运行的同时开启另一段逻辑处理,来协同当前步调的执行
协程与多线程的区别

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,大概是因为没有启用总差一点把

异步加载的实现


来源:https://blog.csdn.net/weixin_45675094/article/details/111994766
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )