首页 > 其他分享 >U3DFrameWorkDemo:一、生命周期管理

U3DFrameWorkDemo:一、生命周期管理

时间:2023-05-29 09:33:45浏览次数:27  
标签:初始化 生命周期 登录 管理 管理者 玩家 遍历 U3DFrameWorkDemo 模块

代码参考

见工程MgrBase、GameManager等代码文件,工程参考第零章工程说明

概述

在游戏的项目中,有一些APP中阶段的转换节点,如:进入App,登录,切地图等。通常有一些模块只在某个阶段被使用,比如:在玩家登录后启动玩家资产管理模块,玩家切地图清理(或刷新)地图资源管理模块等等。还要注意的是这些模块之间,会有顺序耦合的关系,如:组队模块要在角色数据管理模块后初始化,不如拿不到角色数据。

思路

生命周期管理

在游戏开发项目中常常使用模块化开发,常常定义“管理者类”来管理各个模块。有些模块如网络模块在进入游戏被初始化,而有些模块如玩家管理模块直到玩家登录时才被加载,而当玩家注销返回登录界面时被清理,定义一个管理者类,包含以下行为:

  • 初始化
  • 唤醒
  • 休眠
  • 释放

处理不同模块之间的依赖

例如脚本模块依赖于资源管理模块加载脚本,这样资源管理模块必须在脚本模块初始化之前初始化并在脚本模块被释放之后释放。定义一个管理者的管理者,这个类可以使用U3D的GameManager类。

  • 在某个时机如进入游戏、玩家登录按遍历初始化模块并再次遍历唤醒模块,这样可以保证在相互依赖的时候能成功的初始化模块。类似的,在某个时机如退出登录返回大厅,先遍历休眠模块再遍历释放模块
  • 因为U3D和开发者约定GameManager是个Mono脚本,挂载在场景的GameObj里。这样那些Mono管理者的GameObj可以以某种策略挂载在GameManager的GameObj上。

详解

image

  • GameManager 是一个和U3D约定的特殊的类,定义它为单例作为所有管理者的管理者,通过静态注册的方式注册各个节点的模块,并在管理这些模块的生命周期(见下文)。
  • MgrRegister 静态的模块管理者注册器,通过这个类来静态配置模块的生命周期节点
  • MgrBase 管理者基类
  • MonoMgrBase Mono类型的管理者基类

其运行机制以玩家登录为例:玩家进入游戏后的状态为登录状态,此时选择服务器登录进入游戏状态。在选择服务器进入时,通知GameManager切换状态,触发模块管理机制:首先把运行在登录状态下的模块清理掉,加载游戏状态的模块。当然这里的状态节点是简化的,根据需求可能会有其他如:整个APP,大厅,战斗等生命周期。

生命周期开始和结束都会进行两次遍历如图所示,其主要目的在于可以在两次遍历中处理依赖,避免循环依赖。比如组队模块的初始化依赖角色模块,而角色模块又有对组队模块的引用,通常这种对其他模块有依赖或者引用初始化,放在第二次遍历,这里是Start,第一次遍历的初始化只初始化本模块相关的。这样可以保证,其依赖引用的模块一定被初始化了。释放的逻辑类似。
image

备注

  • Mono的Mgr的单例在Awake里手动初始化
  • C# 语言有反射的特性,也可以在程序初始化的时候使用反射分析特性(Attrbute)标签或者继承类型进行注册

标签:初始化,生命周期,登录,管理,管理者,玩家,遍历,U3DFrameWorkDemo,模块
From: https://www.cnblogs.com/hggzhang/p/17073623.html

相关文章

  • 源代码管理工具介绍----Github
        源代码管理工具是软件开发中非常重要的工具,它们用于追踪、管理和协调团队成员之间的代码更改。源代码管理工具使开发团队能够跟踪代码的版本历史。这意味着你可以回顾代码的先前状态、比较不同版本之间的差异,并且能够轻松地恢复到先前的工作状态。这对于修复错误、撤销......
  • C#中使用using进行资源管理的的类型有哪些?
    在C#中,实现IDisposable接口的类型可以使用using语句进行资源管理,具体如下:1. System.IO.Stream:表示字节流的抽象类。它是所有文件I/O操作的基类,包括文件读取和写入。using(Streamstream=newFileStream("file.txt",FileMode.Open)){//使用stream对象进行文件读取操......
  • 基于JAVA的springboot+vue摄影跟拍预定管理系统,附源码+数据库+论文+PPT
    1、项目介绍困扰管理层的许多问题当中,摄影跟拍预定管理一定是不敢忽视的一块。但是管理好摄影跟拍预定又面临很多麻烦需要解决,例如有几个方面:第一,往往用户人数都比较多,如何保证能够管理到每一用户;第二,如何在工作琐碎,记录繁多的情况下将摄影跟拍预定的当前情况反应给领导......
  • 内置User 实现用户管理
                                  2023.5.28一,创建用户在django中我们需要在templates的form中加入{%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,post提交时服......
  • smart-doc加Torna实现文档管理
    介绍smart-doc+Torna组成行业领先的文档生成和管理解决方案,使用smart-doc无侵入完成Java源代码和注释提取生成API文档,自动将文档推送到Torna企业级接口文档管理平台。使用配置数据库mysql.sql安装Tornadockerpulltanghc2020/torna:1.20.0wgethttps://gitee.com/durc......
  • 源代码管理工具——Github
    简介:GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。作为开源代码库以及版本控制系统,Github拥有超过千万的开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法......
  • 普加项目管理中间件示例之三:自定义单元格样式,行样式,以及单元格内容
    通过监听处理"drawcell"事件,可以根据任务信息,设置行、单元格样式,以及自定义单元格Html内容。参考示例demo/DiyDisplay.html。代码如下:project.on("drawcell",function(e){vartask=e.record,column=e.column,field=e.field;//单元格样式if(column.name......
  • 普加项目管理中间件示例之四:自定义单元格可编辑
    通过监听处理"cellbeginedit"事件,可以控制每个行、每个单元格是否可编辑。参考示例:demo/DiyEditable.html代码如下://控制单元格是否可编辑project.on("cellbeginedit",function(e){vartask=e.record,column=e.column,field=e.field;//控制行,摘要任务不可编辑if......
  • 普加项目管理中间件示例之五:自定义条形图外观和提示信息
    可以通过监听drawitem事件来控制右侧条形图的html外观,达到任意的条形图效果。示例地址:demo/DiyDisplayGantt.html代码如下://1)自定义条形图外观显示project.on("drawitem",function(e){varitem=e.item;varleft=e.itemBox.left,top=e.itemBox.top,......
  • 普加项目管理中间件示例之六:自定义右键菜单
    弹出右键菜单时,根据当前选择的行,显示隐藏、启用禁用菜单项。示例地址:demo/DiyMenu.html代码如下://右键菜单弹出varmenu=newProjectMenu();project.setContextMenu(menu);menu.edit.on("click",function(e){ShowTaskWindow(project);});//监听菜单的opening事件,此......