Unity 异步加载场景

4 篇文章 0 订阅
订阅专栏

回顾场景同步加载

SceneManager.LoadScene(“”);//传入场景名,就可以实现同步切换了。

场景同步加载的缺点:
在切换场景时,Unity会删除当前场景上所有对象,并且去加载下一个场景的相关信息。
如果当前场景对象过多或者下一个场景对象过多,这个过程会非常的耗时,会让玩家感受到卡顿。所以异步切换就是来解决该问题的。

场景异步加载

异步加载的两种方式

1.异步加载 第一种方式:通过事件回调函数异步加载
异步加载场景的API:SceneManager.LoadSceneAsync(“场景名称”);
如果想要加载结束之后做一些逻辑处理的话该怎么做?
我们可以看到,异步加载场景函数的返回值类型AsyncOperation中有一个event类型的成员。Event是事件类型,相当于一个更加安全的委托(这里可以把它当做委托来理解)。当Unity异步加载完场景之后,会自动调用completed中的函数。
在这里插入图片描述

例如,下面这个OverLoad()方法是我们想要场景加载结束之后去调用的方法

private void LoadOver(AsyncOperation ao){
   print("LoadOver");
}

那么这样就可以让Unity在场景加载结束之后去自动调用方法了,

AsyncOperation ao=SceneManager.LoadSceneAsync("场景1");
ao.complette+=LoadOver;

通过事件回调函数来实现异步加载的话,当场景加载结束之后,如果你希望去做一些逻辑处理的话,就在事件中添加监听函数就可以了。

2.异步加载 第二种方式:通过协程异步加载

IEnumeratior LoadScene(string name){
  //异步加载场景
  AsyncOperation ao=SceneManager.LoadSceneAsync(name);
  //unity内部的协程协调器法线是异步加载类型的返回对象就会等待
  //等待异步加载结束后才会继续执行迭代器函数中后面的步骤
  yield return ao;
}

Yield return 一个AsyncOperation类型,Unity中的协程协调器就会等待加载完毕之后,再去处理之后的逻辑。
需要加载场景的时候,开启协程来启动场景加载

StartCoroutine(LoadScene("场景1"));

注意:加载场景之后,原有场景中的所有东西都会被删除,包括脚本。这就意味着,当切换场景的时候,当前脚本就失效了,因此加载场景完毕之后的逻辑都不会被执行了。如果想要脚本没有问题,就要让脚本依附的对象过场景不移除。

DontDestroyOnLoad(this.gameObject);

两种方式对比:
第一种方式更加简单,但是它一定要在场景加载结束之后才能去执行指定的逻辑。
第二种方式虽然复杂,但是可以让我们在异步加载中做一些事情。

比如,我们可以在异步加载过程中去显示加载的进度条。

如何实现进度条更新

第一种方式:利用异步加载的进度去更新
在异步加载类型AsyncOperation中,成员progress就是来获取加载进度的,isDone表示是否加载完毕。
在这里插入图片描述

具体实现
在这里插入图片描述

第二种:根据你的游戏规则,自己定义进度条变化的条件
比如,场景加载结束,更新20%的进度,接着去加载场景中的其他信息,比如动态加载怪物,加载结束后让进度条再增加20%,接着再通道加载物品,更新进度条……

总结

场景异步加载有两种方式
    1.通过事件回调函数
    2.协程异步加载

1.事件回调函数
优点:写法简单,逻辑清晰
缺点:只能加载完场景做一些事情 不能再加载过程中处理逻辑
2.协程异步加载
优点:可以在加载过程中处理逻辑,比如进度条更新等
缺点:写法较为麻烦,要通过协程

Unity3D多个异步场景资源 简洁漂亮的画面
04-24
这个是一款 Unity3D异步场景资源 ,界面简洁漂亮的画面,内含多个样式,提供给广大的Unity3D学者研究。
Unity架构之详解域重新场景重新
a_codecat的博客
11-15 4203
Unity架构之详解域重新场景重新
Unity】异步场景
最新发布
UnityCC0526的博客
04-02 109
Unity】异步场景
Unity 异步场景(简单上手版)
北边一颗小星星
04-16 5289
首先附上需要用到的代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class MyLevelManager : MonoBehaviour { static string nextLevel; AsyncOperation async;
Unity异步场景
qq_52373338的博客
01-09 1471
当我们的场景资源过大时,为了能够不影响玩家体验,就会使用异步。AsyncOperation的API。
Unity中资源异步
Asklyw的博客
04-01 3412
本篇博客主要介绍了Unity中资源异步的技术原理和实现方法,并结合代码和注释进行解释和演示。异步在游戏开发中有着广泛的应用场景,如场景异步、资源预、多语言本地化等。在开发过程中,根据实际情况选择合适的异步方式能够大大提高游戏的效率和用户体验。
Unity实现异步场景
weixin_57813136的博客
08-14 1516
由于我们设置在LoadSlider进度条组件里面,所以我们设置的锚点应该居中,然后调整LoadText文本组件的大小,在文本输入区域输入0%,调整不同的字体和样式、大小、对齐方式、颜色。填充区域我们设置的颜色是红色,相当于进度条的颜色,如上图所述,我们设置的是红色,所以进度条是用红色填充,需要上面颜色自己设置对应的颜色即可。方向进度条一般都是默认从左到右,当然也可以设置其他样式,下面Value值是用来滑动进度条的,当我们的Value值变化进度条也会变化,他们是相当于的。
异步场景详解
qq_20179331的博客
08-11 1453
异步场景是一种在Unity场景的方式,它允许在过程中执行其他操作,并提供了进度的反馈。通过异步,可以避免大型场景时的卡顿现象,提高游戏的流畅性和用户体验。
Unity基础 异步场景
Ci
05-25 1653
Unity中,异步场景是指在游戏运行时,将场景中的资源分批次到内存中,以便提高游戏的速度和性能。通常情况下,场景的过程会在主线程中执行,而异步场景可以在后台线程中执行,从而不会阻塞主线程。我们可以使用该属性来指定异步操作完成后要执行的代码。当场景完成时,AsyncOperation对象的isDone属性将返回true。该进属性返回一个在0和1之间的浮点数,表示操作已经完成的比例。allowSceneActivation属性表示当场景完成后,是否立即激活该场景
Unity异步一个场景
qq_614617158的博客
08-09 658
【代码】Unity异步一个场景
unity 场景跳转初步优化——异步跳转
—巨人绿
02-17 3388
usingUnityEngine; usingSystem.Collections; usingUnityEngine.SceneManagement;//命名空间场景跳转 usingUnityEngine.UI; publicclassasync:MonoBehaviour{ AsyncOperationasy;//协程的变量 publi
unity实现场景异步并带有的进度条
07-30
unity实现场景异步并带有的进度条,实现场景平稳,返回的进度为匀速。非常适合用在要大型场景的情况下。
Unity3d异步场景Demo
10-24
通过两个脚本实现异步场景,并且带有UI动画效果,里面代码适用于任何场景,UI通过代码进行独立设置,应需不同的场景 绑定不同的UI 。
Unity3D异步场景代码
04-15
Unity3D异步场景
Unity 工具类 之 简单的异步场景(包含进度和同步方法)类 LoadSceneManager 实现
01-12
2、LoadSceneManager.Instance.LoadSceneAsync 即可异步场景; 3、LoadSceneManager.Instance.LoadScene 即可同步场景; 4、LoadSceneManager.Instance.ProgressLoadSceneAsync 即可获取异步进度;
Unity实战】切换场景进度和如何在后台异步具有庞大世界的游戏场景,实现无缝衔接(附项目源码)
向宇
11-25 2112
观看本文后,我的希望你对unity场景管理有更好的理解,并且能够制作具有巨大世界的游戏并无缝游戏的各个部分在后台运行而不中断游戏玩法,这种方法非常灵活,而且很容易实现,因此无论您是制作小型平台游戏还是大型开放世界游戏,它应该都适用于两者,准备好让我们开始吧!
Unity的‘异步‘操作
leikang111的博客
04-24 725
Unity的异步
Unity 场景异步界面的实现)
热门推荐
xinzhilinger的博客
12-07 1万+
前言: 玩游戏最讨厌的是什么呢?当然是游戏界面啦 但是你知道吗,界面在游戏制作中是不可或缺的,它可以使我们的场景完全完毕后再进入游戏,确保用户不会出现卡顿的情况。 如何实现一个简易的界面呢?来跟我学习一下吧 效果图 UI创建: 首先创建一个开始界面,为Button按钮添事件来完成场景的转换: 然后创建一个界面的UI,首先需要的呢就是一个游戏进度条,可以直接使用Slider来完成创建,其UI层级关系为: 其元素作用为: Background:即整个进度条的背景为棕色 .
unity异步场景
07-09
Unity中,你可以使用异步场景的方法来避免在切换场景时的卡顿或停顿。下面是一个示例代码,展示了如何使用异步场景: ```csharp using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; public class SceneLoader : MonoBehaviour { public string sceneName; // 要场景名字 public void LoadSceneAsync() { StartCoroutine(LoadSceneAsyncCoroutine()); } IEnumerator LoadSceneAsyncCoroutine() { // 异步场景 AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName); // 等待场景完成 while (!asyncLoad.isDone) { // 可以在这里显示进度或执行其他操作 float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f); // 异步的进度范围为0-0.9 Debug.Log("Loading progress: " + (progress * 100) + "%"); yield return null; } } } ``` 在上述代码中,我们首先定义了一个`LoadSceneAsync`方法来启动异步场景的过程。然后,在`LoadSceneAsyncCoroutine`协程中,我们使用`SceneManager.LoadSceneAsync`方法来异步指定的场景。 使用`AsyncOperation`对象可以获取进度,将其归一化为0-1的范围,并在需要时进行显示或其他操作。注意,在异步的过程中,进度会达到0.9,因此我们使用`Mathf.Clamp01`来将进度限制在0-0.9之间。 最后,使用`yield return null`来等待一帧的时间,然后再次循环检查进度。当进度达到1时,表示场景完成。 你可以在需要异步场景的地方调用`LoadSceneAsync`方法,这样就可以在切换场景时避免卡顿或停顿。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Unity 异步加载场景 5180
  • Unity 四元数与物体旋转 1261
  • Resources资源同步加载与异步加载 1259
  • Unity中的特殊文件夹 341
  • Unity开发 程序框架 对象池 237

分类专栏

  • Unity引擎 4篇
  • Unity 开发 程序框架 1篇
  • C#学习笔记 3篇

最新评论

  • Unity开发 程序框架 对象池

    大家一起学编程(python): 确认过眼神,是值得学习的人

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Resources资源同步加载与异步加载
  • Unity中的特殊文件夹
  • Unity 四元数与物体旋转
2023年3篇
2022年1篇
2021年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司恩施网页制作报价玉溪网站关键词优化推荐鹤壁SEO按效果付费公司松原模板网站建设报价哈尔滨建网站哪家好贵阳网站优化排名多少钱临沧优化公司深圳设计网站推荐广东百姓网标王哪家好垦利网站搜索优化哪家好庆阳网站制作多少钱南阳网站推广公司伊春seo排名多少钱咸阳优化阿里seo排名价格百度爱采购多少钱衡水seo网站推广报价济南百度seo哪家好丹东百度网站优化多少钱定西建站多少钱宁德关键词按天扣费公司塘坑营销型网站建设公司哈密关键词按天收费绍兴阿里店铺托管推荐武汉网站优化软件丹东建站多少钱周口百度竞价公司郴州网站推广系统公司阿里网页设计哪家好河源SEO按天计费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化