Unity --- 场景/场景管理类 与 异步场景加载法

这篇具有很好参考价值的文章主要介绍了Unity --- 场景/场景管理类 与 异步场景加载法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.一个游戏是由很多的场景组成的,比如游戏的开始页面,战斗场景,商店页面...等等,这些都是一个个游戏场景

或者比如说:一进入游戏,你一开始来到的是新手村这个场景,出了新手村后来到的就是荒野场景,过来荒野场景后来到的就是大城市场景.....

Unity --- 场景/场景管理类 与 异步场景加载法

 一个游戏是由很多的场景组成的,而每个场景又由很多的游戏物体组成,而每个游戏物体又由很多的脚本组件组成

Unity --- 场景/场景管理类 与 异步场景加载法

 之前我们一直是在默认的场景中添加游戏物体,其实我们也可以添加新的游戏场景,并通过游戏代码加载新的场景


Unity --- 场景/场景管理类 与 异步场景加载法

这个就是一开始Unity自动为我们创建的示例场景(默认场景) 

1.新场景的创建:

首先我们要做的是在Assets文件夹下的scene文件夹中创建一个scene(场景)文件,创建好后再将这个场景文件拖拽到Hirarchy层级中,这样一个新的场景就创建好啦

2.我们的期望是:能够通过代码使得游戏程序自动从场景A加载到场景B中

3.实现方法:假定A是示例场景,B是我们创建的新场景

首先点开File中的Build Setting(生成设置)

Unity --- 场景/场景管理类 与 异步场景加载法

 Unity --- 场景/场景管理类 与 异步场景加载法

这个是指构建中的场景 

如果我们当前创建的场景不是废弃场景是有用的,我们就要把这个场景从HIrarchy中选中并拖到这个Scenes in Build(构建中的场景)中

Unity --- 场景/场景管理类 与 异步场景加载法

 拖进去后就会自动给里面的场景进行编号

脱进去之后我们就可以进行场景跳转啦!!!

首先我们可以在任意一个脚本中写场景跳转代码,所以我们随便在一个游戏物体的脚本中进行编写

注意只有被我们加入到了scene in bulid 中的场景才能够在脚本中被调用和访问

首先和场景有关的是下面这两个类

Unity --- 场景/场景管理类 与 异步场景加载法

 在使用这两个类的时候我们需要引入一个命名空间Unity --- 场景/场景管理类 与 异步场景加载法

 引入后如果我们想在一开始就跳转到某个场景(注意这个场景必须已经被放在了构建中的场景的那个框框中了),我们可以在start方法中通过SceneManager类调用静态方法 LoadScene,括号中传的参数可以是我们要加载的场景的场景名,也可以是要加载的场景的场景编号

 Unity --- 场景/场景管理类 与 异步场景加载法

输入名称的时候要用字符串!

我们如何获取当前激活的场景呢?

Unity --- 场景/场景管理类 与 异步场景加载法 1.用Scene场景类创建一个场景对象,然后通过场景管理类调用静态方法获得当前场景并赋值给我们创建的场景对象

Unity --- 场景/场景管理类 与 异步场景加载法

  向上面这样调用可以获取这个场景对象指向的场景的场景名

Unity --- 场景/场景管理类 与 异步场景加载法

如果被加载,这个属性的值是ture,否则为false Unity --- 场景/场景管理类 与 异步场景加载法

上面这个路径指的是对应场景的场景文件的文件路径

 Unity --- 场景/场景管理类 与 异步场景加载法

获取当前场景在build in scene中的索引 Unity --- 场景/场景管理类 与 异步场景加载法

 这个方法返回的是一个数组,这个数组的类型是Object,然后这个方法的作用是获取调用它的场景对象所指向的场景中的所有游戏物体 


对于场景管理类而言

Unity --- 场景/场景管理类 与 异步场景加载法

这个sceneCount是当前加载的场景的数量 --- 场景并不是同一时间只能存在一个,它是能多个叠加起来的

Unity --- 场景/场景管理类 与 异步场景加载法括号内的参数是我们给新场景的命名 (ps:创建了一个新场景后当然也需要我们创建一个场景对象来接收这个新场景啦)Unity --- 场景/场景管理类 与 异步场景加载法

参数是我们要卸载的场景的场景名 --- 卸载后这个场景和对应的场景文件都会被删除

Unity --- 场景/场景管理类 与 异步场景加载法

加载场景再拓展:

这个函数还有第二个参数,第二个参数是枚举变量,对应的枚举类型是LoadSceneMode,这个枚举类型中只有两个值

Unity --- 场景/场景管理类 与 异步场景加载法

 (ps:枚举变量只能被枚举类型中的成员赋值,访问枚举类型中的成员的方法是 枚举类型名 + 点操作符 + 要访问的枚举成员名)

1.当我们给第二个参数赋值LoadSceneMode.Single的时候,这个加载场景方法就会使得当前游戏中有且只有我们给定的场景(第一个参数 -- 要加载的场景名)会被加载

2.当我们给第二个参数赋值LoadSceneMode.Additive(添加剂)的时候,会让我们给定的场景加载,并让这个场景与当前已经加载好的场景同时显示

这个LoadScene场景加载方法其实有一个问题,就是当加载的场景很大很复杂的时候,加载速度会变慢,而且加载时会出现卡顿

为了解决这个问题,人们提供一种新的方法 --- LoadSceneAsync() --- 异步场景加载法

(Async --  异步)

Unity --- 场景/场景管理类 与 异步场景加载法


通过SceneManager调用的LoadSceneAsync() --- 异步场景加载法

以及如何设置加载进度条

1.异步与同步的区别:正常执行代码就像下面一样,从上到下一根筋执行完

Unity --- 场景/场景管理类 与 异步场景加载法

 Unity --- 场景/场景管理类 与 异步场景加载法

 假设是上面这样一行行代码执行,前三行代码计算机都能很快的执行完毕,但是到了到了后三行代码时计算机执行代码的速度将显著下降,我们称这种为代码阻滞现象

造成这一现象的原因是后三行代码需要的计算时间和操作时间与其它代码相比明显长了很多

代码阻滞现象会导致整个程序在这几行代码处直接卡住,后面的一些能够快速执行的代码也无法执行了,整个游戏就会出现卡顿

为了解决这个问题人们开发出了异步编程(多线程编程)

Unity --- 场景/场景管理类 与 异步场景加载法

 当有耗时操作的时候我们就多开一个线程,把耗时操作交给这个线程执行,然后主线程继续执行耗时操作后面的代码,这样就能在执行耗时操作的时候异步执行其它的代码了。Unity --- 场景/场景管理类 与 异步场景加载法

执行耗时操作的线程在执行完毕后将获得的数据直接传回给主线程就OK了 

在C#中上面这个异步操作就是通过多线程实现的,而在Unity中则是通过协程实现的

那么我们如何在Unity中创建协程呢?

1.一个协程最好只能够处理一个方法,所以我们首先创建一个在协程中执行的方法:Unity --- 场景/场景管理类 与 异步场景加载法

 注意这个方法的返回值一定是 IEnumerator , 在这个方法中写我们想要实现的功能,到时候在写协程中就会调用这个方法并执行方法中的代码

以异步场景加载为例:注意这个LoadSceneAsync()方法只能在协程中通过SceneManager调用,然后这个方法有返回值,返回值的类型是 AsyncOperation,我们要创建一个对应的对象来接收这个返回值

接收到这个返回值后,在协程方法中用 yield(屈服) return 返回

2.协程方法写完之后我们要在MonoBehaviour的方法中开启这个协程:用下面这行代码开启协程,括号里的参数是我们要在协程中执行的协程方法

Unity --- 场景/场景管理类 与 异步场景加载法

 协程执行完毕后会自动关闭,不需要我们手动关闭

 

3.如果已经实现了协程异步加载场景了,我们该如何时时刻刻都获取到这个协程中的场景加载进度呢?Unity --- 场景/场景管理类 与 异步场景加载法

在Updata方法中写这行代码就行:

1.异步场景加载的进度可以通过承接异步场景加载方法返回值的场景对象调用progress属性获得

2.Updata方法每一帧都会被调用,所在Updata中输出加载进度我们就可以每一帧都获取到当前场景的加载进度了

3.场景的加载进度,即progress属性的取值范围是0到0.9,当到达0.9的时候场景加载完毕

4.上面这种方法在加载完场景后就会自动跳转到加载好的场景,那有没有办法让我们手动去选择是否跳转呢?

答案是有的:Unity --- 场景/场景管理类 与 异步场景加载法

通过承接把异步场景加载法加载好后的场景的场景对象调用allowSceneActivation属性,这个属性的默认值是true,即允许自动跳转,我们可以把这个默认值手动改为false,这样就不会自动跳转了,然后我们可以设置按钮让玩家控制这个属性的true/false文章来源地址https://www.toymoban.com/news/detail-444812.html

到了这里,关于Unity --- 场景/场景管理类 与 异步场景加载法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 项目实训--Unity多人游戏开发(十一、PUN框架--游戏场景篇(加载与同步))

    本地加载 有许多方法,举几个例子: 本地加载 本地异步加载(场景内容过多时,防止卡顿异步加载) 多人游戏加载场景 pun2插件加载 这个异步加载起初是觉得场景内容如果过多会引起卡顿。所以把这个应用在了单机模式上。 至于多人游戏加载场景,可能用不到而且也没法

    2024年02月01日
    浏览(40)
  • Addressable 异步加载场景并获取加载进度

    一开始用PercentComplete函数获取加载进度,发现每次都是从0.85开始计算,不准,官方文档解释:“ PercentComplete 将反映总体操作的进展情况,而不会准确地表示仅下载百分比或加载到内存中的百分比。 ” ,“ 要获得准确的下载百分比,请使用GetDownloadStatus()。” GetDownloadStatu

    2024年02月12日
    浏览(28)
  • Unity中资源异步加载

            Unity作为一款优秀的游戏引擎,广泛应用于游戏制作领域。在游戏的开发过程中,资源加载的效率和流畅度尤为重要。对于较大的资源文件,同步加载方式可能会导致游戏卡顿、延迟等问题。因此,采用异步加载的方法可以提高游戏的效率和用户体验。 本篇博客将

    2024年02月06日
    浏览(40)
  • unity如何实现进度条效果(异步加载)

    unity如何实现进度条加载效果,按任意键结束 https://wwez.lanzoul.com/iOakN0tsvgje

    2024年02月03日
    浏览(39)
  • Unity 场景加载和资源加载

    一个游戏往往都是由很多场景组成的,例如会有主界面场景、战斗场景…等,不同的场景也是由若干的资源组合而成,在游戏的制作过程中,场景和资源的加载是不可或缺的。不管是场景还是资源都会涉及到加载的问题,在什么时候进行场景或资源的加载?场景的加载和资源

    2024年02月04日
    浏览(29)
  • 【Unity】AssetBundle资源异步加载以及AB包卸载

    以下代码是基于上一篇文章《AssetBundle资源同步加载》的代码新增了异步加载和AB包卸载功能,有兴趣的同学可以去看看我的上一篇文章。 由于异步加载需要配合协程进行功能开发,所以我对之前封装的AB包资源加载管理器进行修改,改为继承MonoBehaviour的单例模式。 主要修改

    2023年04月08日
    浏览(29)
  • Unity 多场景/大场景加载解决方法

    记录一下最近学习的新的知识,关于解决多场景加载的问题,方便下次及时的巩固复习。 此次使用的是 Unity的异步加载 来实现功能。 将一个大场景的地图分成好几个场景,利用玩家的距离来判断加载哪个场景和卸载哪个场景。 利用玩家的自身距离和预加载场景的距离判断

    2024年02月04日
    浏览(37)
  • Unity场景进度条加载

    首先,创建Canvas,在Canvas中创建一个Button和一个Panel Button:点击之后进入场景加载 Panel:场景加载面板  其次,在panel当中,我们在创建slider和Text Text:用来描述进度条的百分比,所以text可有可无,看自己意愿   slider :就是我们的进度条了 Panel建好后,将SetActive设置为false,

    2023年04月09日
    浏览(38)
  • unity加载场景后光照变暗

    关于unity加载场景后光照变暗的问题 最近在做场景的加载功能时,发现加载新的场景后整个场景的光照都变暗,但是如果是直接运行当前场景的话就不会,后来才发现原来是选择的光照是realtime实时光照,在一开始的场景时,它的灯光是已经渲染好了,但重新加载的时候灯光

    2024年02月15日
    浏览(36)
  • Unity | 以附加模式加载场景,实现多场景叠加及注意事项

    Unity 允许多场景叠加,这种叠加包括编辑模式及运行模式 新建两个简单的场景,SampleScene 和 AdditiveScene,设置不同的天空盒及平行光源颜色 SampleScene AdditiveScene 2.1 添加场景 在编辑器中的场景资源右键选择 Open Scene Additive,或者直接拖拽场景资源到层级视图,都可以实现多场景

    2024年01月19日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包