一种Unity3D引擎的场景切换方法和系统与流程

专利2022-06-29  96


本申请属于unity3d引擎数据管理领域,具体涉及一种unity3d引擎的场景切换方法和系统。



背景技术:

随着互联网产业的蓬勃发展,web相关技术体现出了越来越重要的价值。而任何一个有吸引力的web程序中都必不可少的元素之一就是图形。但是,随着web程序的复杂度不断提高,传统的二维平面图形已无法满足程序的需要。于是,用于web程序的交互式三维图形应用应运而生。

但是早期的web交互式三维图形技术存在不足之处,如javaapplet占用资源多、性能低、且无法利用图形硬件加速功能;flash和silverlight技术虽然性能较高,但是却存在需要插件支持和难以跨平台使用两大问题。而webgl技术的出现完美的解决了上述问题,这项绘图技术标准通过为opengles2.0增加一个javascript绑定,将javascript和opengles2.0结合在了一起,从而为html5canvas提供了硬件3d加速渲染。因此web开发人员就可以借助系统显卡在浏览器里更流畅地展示复杂的3d场景和模型,从而为开发人员开发通用的高性能web交互式三维图形应用提供了可能。但是直接利用底层webgl接口进行开发效率非常低,因此需要将常用的webgl功能封装起来,为用户提供一种中间件机制,从而使用户在无需了解底层细节的情况下,快速开发web交互式三维图形应用,这种中间件机制,通常就被称为3d图形引擎。

unity3d引擎是其中一种被广泛用于建筑可视化、实时三维动画等类型互动内容的3d图形引擎。在unity3d引擎中,场景顾名思义就是用户所看到或听到的物品、建筑、人物、背景、声音、特效等,而场景管理是一种设计模式,组织起虚拟世界物体之间相关、从属、影响与被影响的关系,并确切地将这些关系与3d引擎的其他功能联系起来。

中大型的web程序往往存在多个复杂的3d应用场景和模型,给这类系统应用的普适性带来了挑战。若采用应用场景直接切换模式,可以实现场景画面的顺利转化与衔接,但在这种模式下,静态文件资源的加载和卸载是并行操作,一旦计算机的硬件配置不满足其最低的要求,会造成程序阶段性崩溃,当计算机的硬件配置满足最低要求时,也会因为大文件加载和卸载并行操作给计算机带来较大的计算压力,使得场景切换效率低。随着场景规模和复杂度的提升,系统对计算机硬件配置的要求也越来越高,那么相关硬件的使用寿命会越来越低,不仅不能保证场景切换的流畅度,而且增加了潜在的采纳成本。



技术实现要素:

本申请的目的在于提供一种unity3d引擎的场景切换方法和系统,降低场景切换时给计算机带来的运行压力,提高计算机运行的稳定性和流畅度,提高场景切换效率。

为实现上述目的,本申请所采取的技术方案为:

一种unity3d引擎的场景切换方法,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,所述前置场景和后置场景的场景文件分别包含静态元素,所述unity3d引擎的场景切换方法,包括:

加载前置场景的场景文件并显示;

监听场景切换请求;

接收场景切换请求,根据场景切换请求卸载前置场景的场景文件,加载缓冲场景的场景文件,所述缓冲场景的场景文件为预设且不包含静态元素;

在缓冲场景加载完成后,卸载缓冲场景的场景文件,同时加载后置场景的场景文件并显示,完成前置场景和后置场景的切换显示。

作为优选,所述缓冲场景的场景文件中包含场景切换请求。

作为优选,所述卸载前置场景的场景文件和加载缓冲场景的场景文件为并行操作;所述卸载缓冲场景的场景文件和加载后置场景的场景文件为并行操作。

作为优选,所述加载缓冲场景的场景文件,包括:

加载缓冲场景的场景文件;

激活缓冲场景。

作为优选,所述加载前置场景的场景文件并显示,包括:

加载前置场景的场景文件;

接收动态元素新建请求,根据接收的动态元素新建请求新建前置场景中的动态元素;

加载所述动态元素;

激活前置场景,显示并刷新前置场景中的静态元素和动态元素。

作为优选,所述加载后置场景的场景文件并显示,包括:

加载后置场景的场景文件;

接收动态元素新建请求,根据接收的动态元素新建请求新建后置场景中的动态元素;

加载所述动态元素;

激活后置场景,显示并刷新后置场景中的静态元素和动态元素。

本申请还提供一种unity3d引擎的场景切换系统,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,所述前置场景和后置场景的场景文件分别包含静态元素;

所述unity3d引擎的场景切换系统包括服务器,所述服务器包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一技术方案所述的unity3d引擎的场景切换方法。

本申请提供的unity3d引擎的场景切换方法和系统,在切换场景时,通过引入缓冲场景进行过渡,先卸载前置场景,然后再加载后置场景,可实现场景画面的顺利转换与衔接。该方法要求先创建不包含静态元素的缓冲场景,缓冲场景不具备应用场景功能,其规模和复杂度远小于应用场景。该方法错开执行资源卸载和加载两个过程,能显著降低场景切换过程中峰值内存管理压力,不仅保证了场景切换的流畅度,而且对应用场景规模和复杂度的要求同时降低,在硬件配置较低的计算机上动态分配内存也能让用户操作系统时拥有流畅的ui体验,提高了场景切换效率。

附图说明

图1为本申请的unity3d引擎的场景切换方法的流程图;

图2为本申请实施例1中的场景切换时文件交互示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本申请。

如图1所示,其中一个实施例中提供一种unity3d引擎的场景切换方法,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,所述前置场景和后置场景的场景文件分别包含静态元素,所述unity3d引擎的场景切换方法,包括:

加载前置场景的场景文件并显示;

监听场景切换请求;

接收场景切换请求,根据场景切换请求卸载前置场景的场景文件,加载缓冲场景的场景文件,所述缓冲场景的场景文件为预设且不包含静态元素;

在缓冲场景加载完成后,卸载缓冲场景的场景文件,同时加载后置场景的场景文件并显示,完成前置场景和后置场景的切换显示。

本实施例中缓冲场景的场景文件中不包含静态元素,即缓冲场景的场景文件不具备应用场景功能,其规模和复杂度远小于前置场景和后置场景。

相对于现有技术中提供的异步加载方法,本申请提供的场景切换方法不另外占用线程,避免在场景切换时需要两个线程去占用系统资源,本申请的切换方法从内存维度上考虑错开了内存的使用,从时间维度上考虑比启用两个线程更节省时间。

为了在卸载前置场景和加载缓冲场景完成后立即执行后续步骤,在一个实施例中,缓冲场景的场景文件中包含场景切换请求,即在缓冲场景加载完成后,识别到缓冲场景中的场景切换请求,立即执行后置场景的加载。

并且卸载前置场景的场景文件和加载缓冲场景的场景文件为并行操作;所述卸载缓冲场景的场景文件和加载后置场景的场景文件为并行操作。

由于缓冲场景的场景文件中不包括静态元素,则加载缓冲场景的场景文件,具体包括:

加载缓冲场景的场景文件;激活缓冲场景,即完成缓冲场景的加载。相对于并行卸载前置场景和加载后置场景而言,并行卸载前置场景和加载缓冲场景对系统的压力要小的多,即执行速度更快。

在场景切换中,不仅要切换显示静态元素,还需要显示场景中的动态元素,具体的,加载前置场景的场景文件并显示,包括:

加载前置场景的场景文件;

接收动态元素新建请求,根据接收的动态元素新建请求新建前置场景中的动态元素;

加载所述动态元素;

激活前置场景,显示和刷新前置场景中的静态元素和动态元素。

同理,加载后置场景的场景文件并显示,包括:

加载后置场景的场景文件;

接收动态元素新建请求,根据接收的动态元素新建请求新建后置场景中的动态元素;

加载所述动态元素;

激活后置场景,显示和刷新后置场景中的静态元素和动态元素。

本实施例提供的unity3d引擎的场景切换方法,在切换场景时,通过引入缓冲场景进行过渡,先卸载前置场景,然后再加载后置场景,可实现场景画面的顺利转换与衔接。该方法要求先创建不包含静态元素的缓冲场景,缓冲场景不具备应用场景功能,其规模和复杂度远小于应用场景。该方法错开执行资源卸载和加载两个过程,能显著降低场景切换过程中峰值内存管理压力,不仅保证了场景切换的流畅度,而且对应用场景规模和复杂度的要求同时降低,在硬件配置较低的计算机上动态分配内存也能让用户操作系统时拥有流畅的ui体验,提高了场景切换效率。

在另一实施例中,本实施例还提供一种unity3d引擎的场景切换系统,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,所述前置场景和后置场景的场景文件分别包含静态元素。

所述unity3d引擎的场景切换系统包括服务器,所述服务器包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例中的unity3d引擎的场景切换方法。

关于unity3d引擎的场景切换系统的进一步限定参见上述对于unity3d引擎的场景切换方法的限定,在此不再进行赘述。

本实施例的unity3d引擎的场景切换系统,即一种计算机设备,该计算机设备可以是终端。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种unity3d引擎的场景切换方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

为了便于理解,以下通过实施例进一步说明本申请unity3d引擎的场景切换系统的工作流程。

实施例1

如图2所示,为了便于直观表示在场景切换中文件的调用,本实施例中的场景切换系统还包括文件管理单元和内存管理单元。

本实施例提供的是基于web交互式的社区三维可视化应用,将社区场景文件作为资源封装形成文件集合并预先存储在系统的文件管理单元中,通过unity3d引擎提供场景切换的方法。

在三维可视化应用中,社区场景文件的数量与实际社区的数量一致,并且社区场景文件应大于等于2个,以满足场景切换条件。

假设在社区三维可视化应用中,社区场景包含3个,记为社区场景a、社区场景b和社区场景c,对应的社区场景文件数量为3个,且分别记作场景文件a、场景文件b和场景文件c,场景文件即场景资源。在每个社区场景中,建筑模型、植被模型作为静态元素,其网格、材质和纹理等资源已经封装在场景文件内部,而人物模型、设备poi、ui界面作为动态元素,需要在场景文件载入后进行新建。

首先需要新建一个缓冲场景的场景文件,该缓冲场景的场景文件未引用静态资源文件,即场景文件中部包含静态元素,不具备应用场景功能,其规模和复杂度远小于应用场景。

基于web交互式的智慧社区三维可视化应用,主要实施步骤包括:

(1)应用界面远程请求界面显示,内存管理单元加载场景文件a至内存中,内存管理单元分配内存给场景文件a,即社区场景a中建筑模型、植被模型的网格、材质和纹理等静态资源载入内存。

应用界面请求创建社区场景a中人物模型、设备poi、ui界面所需的动态资源文件(即动态元素)。

内存管理单元加载新建的动态元素至内存,新建社区场景a中的人物、设备poi和ui界面。

激活社区场景a,显示和刷新社区场景a的内容。

(2)用户通过应用界面发起社区场景切换请求,请求切换至社区场景b。

应用界面响应切换请求,关闭社区场景a但不直接进行切换至社区场景b的操作。

(3)应用界面通知内存管理单元对社区场景a中的建筑、人物、植被模型,以及设备poi、ui界面所对应的资源进行卸载,内存管理单元释放内存中的社区场景a的相关资源。

(4)内存管理单元同时载入缓冲场景的场景文件,并将其激活。

(5)应用界面识别到缓冲场景的场景文件中的场景切换请求,通知内存管理单元,对缓冲场景进行卸载。

(6)应用界面同时远程请求,内存管理单元加载社区场景文件b至内存中,即社区场景b中建筑、植被模型的网格、材质和纹理等静态资源载入内存。

应用界面请求创建社区场景b中人物模型、设备poi、ui界面所需的动态资源文件。

内存管理单元加载新建的动态资源文件至内存,新建社区场景b中的人物、设备poi和ui界面。

激活社区场景b,显示和刷新社区场景b的内容。

(7)用户通过应用界面发起社区场景切换命令,请求切换至社区场景c。

应用系统开始响应切换请求,关闭社区场景b但不直接进行切换至社区场景c的操作。

(8)应用界面通知内存管理单元对社区场景b中的建筑、人物、植被模型,以及设备poi、ui界面所对应的资源进行卸载。

(9)内存管理单元同时载入缓冲场景的场景文件,并将其激活。

(10)应用界面识别到缓冲场景的场景文件中的场景切换请求,通知内存管理系统,对缓冲场景进行卸载。

(11)应用界面远程请求,内存管理单元加载社区场景文件c至内存中,即社区场景c中建筑、植被模型的网格、材质和纹理等静态资源载入内存。

应用界面请求创建社区场景c中人物模型、设备poi、ui界面所需的动态资源文件

内存管理单元加载新建的动态资源文件至内存,新建社区场景c中的人物、设备poi和ui界面。

激活社区场景c,显示和刷新社区场景c的内容。

在本实施例中,按所述方法从社区场景a切换至社区场景c时,借助内存分析器测量得到峰值内存出现在社区场景b加载完成时,其值为182.4m;而采用现有技术中的直接切换模式时,从社区场景b直接切换至社区场景c时将出现峰值内存,其值为271.2m。

由此可见本实施例通过引入缓冲场景,显著降低峰值内存。在web交互式平台上应用内存受限时,本申请不仅保证了场景切换的流畅度,而且对应用场景规模和复杂度要求同时降低。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。


技术特征:

1.一种unity3d引擎的场景切换方法,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,其特征在于,所述前置场景和后置场景的场景文件分别包含静态元素,所述的unity3d引擎的场景切换方法,包括:

加载前置场景的场景文件并显示;

监听场景切换请求;

接收场景切换请求,根据场景切换请求卸载前置场景的场景文件,加载缓冲场景的场景文件,所述缓冲场景的场景文件为预设且不包含静态元素;

在缓冲场景加载完成后,卸载缓冲场景的场景文件,同时加载后置场景的场景文件并显示,完成前置场景和后置场景的切换显示。

2.如权利要求1所述的unity3d引擎的场景切换方法,其特征在于,所述缓冲场景的场景文件中包含场景切换请求。

3.如权利要求1所述的unity3d引擎的场景切换方法,其特征在于,所述卸载前置场景的场景文件和加载缓冲场景的场景文件为并行操作;所述卸载缓冲场景的场景文件和加载后置场景的场景文件为并行操作。

4.如权利要求1所述的unity3d引擎的场景切换方法,其特征在于,所述加载缓冲场景的场景文件,包括:

加载缓冲场景的场景文件;

激活缓冲场景。

5.如权利要求1所述的unity3d引擎的场景切换方法,其特征在于,所述加载前置场景的场景文件并显示,包括:

加载前置场景的场景文件;

接收动态元素新建请求,根据接收的动态元素新建请求新建前置场景中的动态元素;

加载所述动态元素;

激活前置场景,显示和刷新前置场景中的静态元素和动态元素。

6.如权利要求1所述的unity3d引擎的场景切换方法,其特征在于,所述加载后置场景的场景文件并显示,包括:

加载后置场景的场景文件;

接收动态元素新建请求,根据接收的动态元素新建请求新建后置场景中的动态元素;

加载所述动态元素;

激活后置场景,显示和刷新后置场景中的静态元素和动态元素。

7.一种unity3d引擎的场景切换系统,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,其特征在于,所述前置场景和后置场景的场景文件分别包含静态元素;

所述unity3d引擎的场景切换系统包括服务器,所述服务器包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述的unity3d引擎的场景切换方法。

技术总结
本发明公开了一种Unity3D引擎的场景切换方法和系统,用于完成前置场景和后置场景的切换显示,所述前置场景和后置场景均包含场景文件,所述前置场景和后置场景的场景文件分别包含静态元素,Unity3D引擎的场景切换方法包括:加载前置场景的场景文件并显示;监听场景切换请求;接收场景切换请求,根据场景切换请求卸载前置场景的场景文件,加载缓冲场景的场景文件,所述缓冲场景的场景文件为预设且不包含静态元素;在缓冲场景加载完成后,卸载缓冲场景的场景文件,同时加载后置场景的场景文件并显示,完成前置场景和后置场景的切换显示。本发明降低场景切换时给计算机带来的运行压力,提高计算机运行的稳定性和流畅度,提高场景切换效率。

技术研发人员:王军;邵建伟;林君
受保护的技术使用者:中电海康集团有限公司
技术研发日:2019.12.14
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-48559.html

最新回复(0)