CN112685027B - 一种Unity场景和界面的管理方法 - Google Patents
一种Unity场景和界面的管理方法 Download PDFInfo
- Publication number
- CN112685027B CN112685027B CN202011565295.9A CN202011565295A CN112685027B CN 112685027 B CN112685027 B CN 112685027B CN 202011565295 A CN202011565295 A CN 202011565295A CN 112685027 B CN112685027 B CN 112685027B
- Authority
- CN
- China
- Prior art keywords
- group
- function
- scene
- interface
- scenes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- User Interface Of Digital Computer (AREA)
Abstract
本发明公开了一种Unity场景和界面的管理方法,该方法包括:S1、Unity的场景和界面的自动管理;S2、功能模块间的快速跳转;S3、组的状态与业务逻辑的关联;S4、不活跃的组的清理;S5、保底机制的实现。本发明在Unity提供接口的基础上,统一管理和维护多个场景和界面之间的关系,极大地简化了Unity中场景和界面的使用流程,提升了游戏开发的效率以及游戏的性能。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种Unity场景和界面的管理方法。
背景技术
Unity引擎为开发者提供了简单的场景和界面的管理方式,但在大型的游戏开发过程中,场景和界面数量过多,相互之间的关系太复杂,很容易出现难以使用和难以维护的问题,从而影响开发效率或降低游戏性能。
发明内容
为解决上述问题,本发明提供了一种Unity场景和界面的管理方法,已解决Unity场景和界面难以使用和难以维护的问题。
本发明采用以下技术方案:
一种Unity场景和界面的管理方法,该方法包括:
S1、Unity的场景和界面的自动管理;
S2、功能模块间的快速跳转;
S3、组的状态与业务逻辑的关联;
S4、不活跃的组的清理;
S5、保底机制的实现。
进一步地,所述Unity的场景和界面的自动管理是通过对Unity的场景和界面的打开、关闭、隐藏和显示方式进行封装实现的,具体包括:
S11、打开新场景时,默认显示当前场景同时自动隐藏其他场景;
S12、打开新场景时,通过传递参数控制当前界面和其他界面的显示顺序;
S13、打开新场景或界面时,若已经打开的功能模块包含该新场景或界面时,则可选择是否跳转到对应的功能;
S14、当关闭当前场景时,自动显示其他场景或全屏界面。
进一步地,所述功能模块间的快速跳转,采用将一个功能模块定义为一个组,每个组由若干个场景或界面组成,将所述若干个场景或界面统一放进一个组中进行管理,具体为:
S21、在打开新的场景或界面时,通过传递模块的名字生成新的组,并将场景或界面的信息记录在组中,所述场景或界面的信息包括名称和打开时所传递的初始化数据;
S22、对组里的场景和界面进行批量管理,包括打开、关闭、显示、隐藏和清理,所述打开为新建一个新的组,所述关闭为批量关闭所有的场景和界面,所述显示和隐藏为批量显示和隐藏所有的场景和界面,所述清理为记录所有场景和界面的关键信息后将其全部关闭;
S23、若跳转到其他可全屏渲染的组时,则自动隐藏当前组,若其他组不为全屏渲染时,则保留当前组;
S24、所有的组通过一个组管理器进行管理,不同的组之间通过一个列表维护前后关系,即打开新的组时,在列表尾新生成组的数据,回退到之前功能时,销毁列表尾部的组并打开前面的组;
S25、当新打开的组已经存在时,则直接回到该组。
进一步地,所述组的状态与业务逻辑的关联,即通过自定义生命周期,将组的状态和Unity业务逻辑关联起来,所述自定义生命周期包括OnOpen函数、OnShow函数、OnHide函数、OnSave函数和OnClose函数。
进一步地,所述组与业务逻辑的关联具体为:
S31、打开组对应OnOpen函数,即在组中打开场景和界面成功后会首先执行该函数,该函数对应Unity中场景或界面的数据或事件进行初始化操作;
S32、显示组对应OnShow函数,即在OnOpen函数后执行,表示场景或界面已经显示出来,该函数对应Unity中场景或界面的显示进行刷新操作;
S33、隐藏组对应OnHide函数,即在隐藏组时执行该函数,该函数对应Unity中与隐藏相应的操作;
S34、清理组对应OnSave函数,即在清理组时执行,该函数并返回自定义的数据,待清理完成后再还原时,能通过所述自定义的数据还原到指定的状态,该函数对应Unity中无对应的操作;
S35、关闭组对应OnClose函数,即在关闭组时执行,该函数对应Unity中数据或事件的清理操作。
进一步地,所述不活跃的“组”的清理具体为:
S41、在组中打开场景或界面时,记录下能准确还原的关键信息,包括场景或界面名称以及初始化数据;
S42、在超过定义的内存上限后,按照打开的先后顺序清理不活跃的组,调用场景或界面上脚本的OnSave函数,该函数返回给组后续需要的还原数据,所述组将所述还原数据存储起来;
S43、清理掉所述组里不活跃的场景或界面,只保留还原数据,并将该组标记为已清理状态;
S44、在下次打开所述标记为已清理状态的组时,根据保留的所述还原数据,将已清理的场景和界面还原回来。
进一步地,所述保底机制具体为:
S51、在打开和关闭组时进行当前组状态的标记;
S52、若列表尾部的组已经被清空但是没有销毁该组的对象而是一直占据着列表的尾部的情况,则组管理器强行关闭掉所有的组,直接回退到指定的组;
S53、若在打开新的场景或界面时就出现异常,组管理器捕获到异常情况后可直接强行关闭掉所有的组,直接回退到指定的组。
进一步地,所述指定的组为游戏开始的玩法。
采用上述技术方案后,本发明与背景技术相比,具有如下优点:
1、本发明在Unity提供接口的基础上,统一管理和维护多个场景和界面之间的关系,极大地简化了Unity中场景和界面的使用流程,提升了游戏开发的效率以及游戏的性能;
2、自动管理所有场景和界面,操作单个场景和界面时不受其他场景和界面的影响,提供场景和界面便捷的使用方式;
3、对属于同一个功能模块的场景和界面,以组为单位进行批量管理,维护各组之间的跳转关系,实现在各个功能间的快速跳转;
4、实现自定义的生命周期函数,将业务逻辑和组的状态关联起来,在组的状态发生改变时,根据各个模块的需求编写对应的业务代码;
5、记录场景和界面的关键信息,在不直接缓存场景和界面的情况下,实现跳转功能,达到节省内存的目的;
6、实现快速跳转的保底机制,在游戏流程出现异常时自动跳转到游戏指定的功能中,避免出现游戏卡死的情况。
附图说明
图1为本发明的方法示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例
如图1所示,一种Unity场景和界面的管理方法,该方法包括:
S1、Unity的场景和界面的自动管理;
在调用Unity原生接口加载场景和界面时,通常除了需要关心自身功能模块的场景和界面之外,还需要关心其他模块的场景和界面的状态,避免其他场景和界面的存在对自身模块场景和界面的影响。因此,本实施例通过对Unity的场景和界面的打开、关闭、隐藏和显示方式进行封装,以实现一些通用且复杂的管理流程,具体包括如下方法:
S11、打开新场景时,默认显示当前场景同时自动隐藏其他场景;
S12、打开新场景时,通过传递参数控制当前界面和其他界面的显示顺序;
S13、打开新场景或界面时,若已经打开的功能模块包含该新场景或界面时,则可选择是否跳转到对应的功能;
S14、当关闭当前场景时,自动显示其他场景或全屏界面。
统一管理场景和界面后,就只需关心自身模块中的场景和界面的使用,不用管理和自身模块无关的场景或界面。
S2、功能模块间的快速跳转;
所述功能模块间的快速跳转,采用将一个功能模块定义为一个组,每个组由若干个场景或界面组成,将所述若干个场景或界面统一放进一个组中进行管理,以实现快速地在不同的功能模块即组中进行跳转,具体为:
S21、在打开新的场景或界面时,通过传递模块的名字生成新的组,并将场景或界面的信息记录在组中,所述场景或界面的信息包括名称和打开时所传递的初始化数据;
S22、对组里的场景和界面进行批量管理,包括打开、关闭、显示、隐藏和清理,所述打开为新建一个新的组,所述关闭为批量关闭所有的场景和界面,所述显示和隐藏为批量显示和隐藏所有的场景和界面,所述清理为记录所有场景和界面的关键信息后将其全部关闭;
S23、若跳转到其他可全屏渲染的组时,则自动隐藏当前组,若其他组不为全屏渲染时,则保留当前组,以保证任何时候整个游戏画面都处于全屏渲染的状态;
S24、所有的组通过一个组管理器进行管理,不同的组之间通过一个列表维护前后关系,即打开新的组时,在列表尾新生成组的数据,回退到之前功能时,销毁列表尾部的组并打开前面的组;
S25、当新打开的组已经存在时,则直接回到该组,避免无限循环的跳转,例如:A功能经过一系列跳转又回到A时,“A→B→C→A”,则关闭中间的“B、C组”,则可实现从任意组快速跳转到其他组。
S3、组的状态与业务逻辑的关联;
所述组的状态与业务逻辑的关联,即通过自定义生命周期,将组的状态和Unity业务逻辑关联起来,所述自定义生命周期包括OnOpen函数、OnShow函数、OnHide函数、OnSave函数和OnClose函数。
与Unity的Awake、OnEnable、OnDisable、OnDestroy等生命周期类似,当组的状态发生改变时,业务逻辑也需要做出不同的反应。
所述组与业务逻辑的关联具体为:
S31、打开组对应OnOpen函数,即在组中打开场景和界面成功后会首先执行该函数,该函数对应Unity中场景或界面的数据或事件进行初始化操作;
S32、显示组对应OnShow函数,即在OnOpen函数后执行,表示场景或界面已经显示出来,该函数对应Unity中场景或界面的显示进行刷新操作;
S33、隐藏组对应OnHide函数,即在隐藏组时执行该函数,该函数对应Unity中与隐藏相应的操作;
S34、清理组对应OnSave函数,即在清理组时执行,该函数并返回自定义的数据,待清理完成后再还原时,能通过所述自定义的数据还原到指定的状态,该函数对应Unity中无对应的操作;
S35、关闭组对应OnClose函数,即在关闭组时执行,该函数对应Unity中数据或事件的清理操作。
Unity的生命周期由MonoBehaviour调用,本实施例中的组的状态改变的时机与Unity的生命周期不能完全对应起来,通过自定义的生命周期,可方便地将业务逻辑与组的状态完全关联起来,也可以实现像“OnSave”这样的Unity所不支持的定制功能。
S4、不活跃的组的清理;
硬件设备的性能和配置是有限的,理论上当有足够多的界面或场景需要缓存时,会因为内存不足引起游戏闪退,或者缓存东西过多引起CPU性能问题,因此需要一种清理后可还原的机制,以解决此问题。
所述不活跃的“组”的清理具体为:
S41、在组中打开场景或界面时,记录下能准确还原的关键信息,包括场景或界面名称以及初始化数据;
S42、在超过定义的内存上限后,按照打开的先后顺序清理不活跃的组,调用场景或界面上脚本的OnSave函数,该函数返回给组后续需要的还原数据,所述组将所述还原数据存储起来;
S43、清理掉所述组里不活跃的场景或界面,只保留还原数据,并将该组标记为已清理状态;
S44、在下次打开所述标记为已清理状态的组时,根据保留的所述还原数据,将已清理的场景和界面还原回来。
相对于场景和界面占用大量的内存,通过组只缓存还原时必要的信息,实现了在不缓存真实的界面和场景的情况下,也能回退跳转到指定组的功能,从而在跳转路线较复杂时也能保持可控的内存状态,避免因内存原因引起的游戏闪退。
S5、保底机制的实现。
所述保底机制具体为:
S51、在打开和关闭组时进行当前组状态的标记;
S52、若列表尾部的组已经被清空但是没有销毁该组的对象而是一直占据着列表的尾部的情况,则组管理器强行关闭掉所有的组,直接回退到指定的组;
S53、若在打开新的场景或界面时就出现异常,组管理器捕获到异常情况后可直接强行关闭掉所有的组,直接回退到指定的组。所述指定的组为游戏开始的玩法。
游戏中的各组之间的跳转路线纷繁复杂,各功能模块之间在开发时也不需要关心对方的状态,所以有概率出现因为组使用不当,或逻辑错误导致游戏流程卡住的问题。组管理器实现一种保底机制,在出现流程卡死时能直接回退到指定的功能中。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (5)
1.一种Unity场景和界面的管理方法,其特征在于:该方法包括:
S1、Unity的场景和界面的自动管理:通过对Unity的场景和界面的打开、关闭、隐藏和显示方式进行封装实现;
S2、功能模块间的快速跳转:采用将一个功能模块定义为一个组,每个组由若干个场景或界面组成,将所述若干个场景或界面统一放进一个组中进行管理;所有的组通过一个组管理器进行管理,不同的组之间通过一个列表维护前后关系,即打开新的组时,在列表尾新生成组的数据,回退到之前功能时,销毁列表尾部的组并打开前面的组;当新打开的组已经存在时,则直接回到该组;
S3、组的状态与业务逻辑的关联:通过自定义生命周期,将组的状态和Unity业务逻辑关联起来,所述自定义生命周期包括OnOpen函数、OnShow函数、OnHide函数、OnSave函数和OnClose函数;
S4、不活跃的组的清理:利用所述组将还原数据存储起来,清理掉所述组里不活跃的场景或界面,只保留还原数据,并将该组标记为已清理状态;
S5、保底机制的实现,所述保底机制具体为:
S51、在打开和关闭组时进行当前组状态的标记;
S52、若列表尾部的组已经被清空但是没有销毁该组的对象而是一直占据着列表的尾部的情况,则组管理器强行关闭掉所有的组,直接回退到指定的组;
S53、若在打开新的场景或界面时就出现异常,组管理器捕获到异常情况后直接强行关闭掉所有的组,直接回退到指定的组。
2.如权利要求1所述的一种Unity场景和界面的管理方法,其特征在于:所述Unity的场景和界面的自动管理是通过对Unity的场景和界面的打开、关闭、隐藏和显示方式进行封装实现的,具体包括:
S11、打开新场景时,默认显示当前场景同时自动隐藏其他场景;
S12、打开新场景时,通过传递参数控制当前界面和其他界面的显示顺序;
S13、打开新场景或界面时,若已经打开的功能模块包含该新场景或界面时,则选择是否跳转到对应的功能;
S14、当关闭当前场景时,自动显示其他场景或全屏界面。
3.如权利要求2所述的一种Unity场景和界面的管理方法,其特征在于:所述功能模块间的快速跳转,采用将一个功能模块定义为一个组,每个组由若干个场景或界面组成,将所述若干个场景或界面统一放进一个组中进行管理,具体为:
S21、在打开新的场景或界面时,通过传递模块的名字生成新的组,并将场景或界面的信息记录在组中,所述场景或界面的信息包括名称和打开时所传递的初始化数据;
S22、对组里的场景和界面进行批量管理,包括打开、关闭、显示、隐藏和清理,所述打开为新建一个新的组,所述关闭为批量关闭所有的场景和界面,所述显示和隐藏为批量显示和隐藏所有的场景和界面,所述清理为记录所有场景和界面的关键信息后将其全部关闭;
S23、若跳转到其他可全屏渲染的组时,则自动隐藏当前组,若其他组不为全屏渲染时,则保留当前组;
S24、所有的组通过一个组管理器进行管理,不同的组之间通过一个列表维护前后关系,即打开新的组时,在列表尾新生成组的数据,回退到之前功能时,销毁列表尾部的组并打开前面的组;
S25、当新打开的组已经存在时,则直接回到该组。
4.如权利要求1所述的一种Unity场景和界面的管理方法,其特征在于:所述组与业务逻辑的关联具体为:
S31、打开组对应OnOpen函数,即在组中打开场景和界面成功后会首先执行该函数,该函数对应Unity中场景或界面的数据或事件进行初始化操作;
S32、显示组对应OnShow函数,即在OnOpen函数后执行,表示场景或界面已经显示出来,该函数对应Unity中场景或界面的显示进行刷新操作;
S33、隐藏组对应OnHide函数,即在隐藏组时执行该函数,该函数对应Unity中与隐藏相应的操作;
S34、清理组对应OnSave函数,即在清理组时执行,该函数并返回自定义的数据,待清理完成后再还原时,能通过所述自定义的数据还原到指定的状态,该函数对应Unity中无对应的操作;
S35、关闭组对应OnClose函数,即在关闭组时执行,该函数对应Unity中数据或事件的清理操作。
5.如权利要求4所述的一种Unity场景和界面的管理方法,其特征在于:所述不活跃的组的清理具体为:
S41、在组中打开场景或界面时,记录下能准确还原的关键信息,包括场景或界面名称以及初始化数据;
S42、在超过定义的内存上限后,按照打开的先后顺序清理不活跃的组,调用场景或界面上脚本的OnSave函数,该函数返回给组后续需要的还原数据,所述组将所述还原数据存储起来;
S43、清理掉所述组里不活跃的场景或界面,只保留还原数据,并将该组标记为已清理状态;
S44、在下次打开所述标记为已清理状态的组时,根据保留的所述还原数据,将已清理的场景和界面还原回来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011565295.9A CN112685027B (zh) | 2020-12-25 | 2020-12-25 | 一种Unity场景和界面的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011565295.9A CN112685027B (zh) | 2020-12-25 | 2020-12-25 | 一种Unity场景和界面的管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112685027A CN112685027A (zh) | 2021-04-20 |
CN112685027B true CN112685027B (zh) | 2022-06-07 |
Family
ID=75453351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011565295.9A Active CN112685027B (zh) | 2020-12-25 | 2020-12-25 | 一种Unity场景和界面的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112685027B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107797833A (zh) * | 2016-08-29 | 2018-03-13 | 北京雪球信息科技有限公司 | 智能设备上应用程序的界面显示方法 |
CN108549560A (zh) * | 2018-02-28 | 2018-09-18 | 腾讯科技(成都)有限公司 | 界面状态的切换方法和装置、存储介质、电子装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015100163A1 (en) * | 2013-12-23 | 2015-07-02 | Abb Technology Ag | Interactive training interface for asset health management |
-
2020
- 2020-12-25 CN CN202011565295.9A patent/CN112685027B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107797833A (zh) * | 2016-08-29 | 2018-03-13 | 北京雪球信息科技有限公司 | 智能设备上应用程序的界面显示方法 |
CN108549560A (zh) * | 2018-02-28 | 2018-09-18 | 腾讯科技(成都)有限公司 | 界面状态的切换方法和装置、存储介质、电子装置 |
Non-Patent Citations (1)
Title |
---|
吴万龙."基于BREW平台的手机短信界面设计与实现".《中国优秀硕士学位论文全文数据库信息科技辑》.2011,(第07期), * |
Also Published As
Publication number | Publication date |
---|---|
CN112685027A (zh) | 2021-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105474125B (zh) | 用于跟踪唤醒锁定使用的技术 | |
CN105556482B (zh) | 监视移动应用性能 | |
US8078894B1 (en) | Power management architecture, method and configuration system | |
CN105357273B (zh) | 异步通信模式下socket通信与进程管理通用平台及方法 | |
US20080282194A1 (en) | Graphical menu interface, implementing method thereof, and operating method thereof | |
CN106528303A (zh) | 一种基于gpu纹理共享来获取d3d12游戏源图像的方法及系统 | |
CN106296135A (zh) | 事件提醒方法、装置及终端 | |
CN110377141A (zh) | 应用处理方法、装置、电子设备以及存储介质 | |
CN114095776B (zh) | 屏幕录制方法及电子设备 | |
CN108563581A (zh) | 异常检测处理方法及装置、电子设备及计算机存储介质 | |
CN110908880B (zh) | 埋点代码注入方法、事件上报方法及其相关设备 | |
CN107562415A (zh) | 一种贴纸功能框架实现方法与设备 | |
CN109471626A (zh) | 页面逻辑结构、页面生成方法、页面数据处理方法及装置 | |
CN106131643A (zh) | 一种弹幕处理方法、处理装置及其电子设备 | |
CN109857489B (zh) | 基于Android系统的开发系统、解耦方法和装置 | |
CN112685027B (zh) | 一种Unity场景和界面的管理方法 | |
CN104866291A (zh) | 一种基于Android的手机2D游戏引擎 | |
CN110032429A (zh) | 信息处理方法、装置、移动终端及计算机可读存储介质 | |
CN107423090A (zh) | 一种Flash播放器异常日志管理方法及系统 | |
CN107820605A (zh) | 用于动态低延迟优化的系统和方法 | |
CN109471614A (zh) | 应用程序混合开发的方法及装置 | |
CN101431569A (zh) | 可自定制和面向网络服务的手机桌面环境的实现方法 | |
CN108762983A (zh) | 多媒体数据恢复方法及装置 | |
CN104778087B (zh) | 一种信息处理方法以及信息处理装置 | |
CN111104281A (zh) | 一种游戏性能监控方法、装置、系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |