游戏第一步是数据的初始化,这一步使用的框架的流程

一、GameFramework框架的流程

  流程是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。

    继承于ProcedureBase 可以使用生命周期函数,类似于Unity3D的生命周期函数。OnInit初始化、OnEnter每次进入流程、OnUpdate每次帧更新、OnLeave每次离开这个流程时执行、OnDestroy游戏退出时执行。

二、流程的使用

  框架的流程组件为Procedure。具体逻辑看不到,但在面板上可以看到,里面存在多个流程类,还有一个Entrance Procedure的下拉列表,这个是选定第一个执行的流程,即运行游戏后的第一个流程。这里选的是ProcedureLaunch。

Unity 主流游戏框架 unity游戏框架与架构入门_数据

    

Unity 主流游戏框架 unity游戏框架与架构入门_Unity 主流游戏框架_02

    ProcedureLaunch类里面主要进行了数据初始化,OnEnter里写的部分数据初始化逻辑,在OnUpdate使用ChangeState函数切换到下一个状态节点ProcedureSplash,在ProcedureSplash状态内会检查当前版本状态,以返回的bool值来跳转流程。    

Unity 主流游戏框架 unity游戏框架与架构入门_Unity3D_03

    返回true时,进入ProcedurePreload流程,这个流程在Procedure组件内已有定义。预加载流程,OnEnter内对配置表、数据表、字典加载事件进行了监听并设置了回调函数,这几个事件是GameFramework框架内置事件,然后加载了配置表、数据表、字典,在执行完OnEnter的预加载后进入OnUpate,在这里使用枚举器检查了m_LoadedFlag的字典内是否为空,当不为空时,设置了状态机数据VarInt(框架内置数据内型,封装的int),这个数据将在下一个流程内使用,分别为下个场景ID和场景配置数据"Scene.Menu",使用ChangeState进入ProcedureChangeScene流程。注意:在离开ProcedurePreload流程时会在OnLeave对之前在OnEnter注册的事件进行释放。

Unity 主流游戏框架 unity游戏框架与架构入门_GameFramework_04

,这个流程在Procedure组件内已有定义,版本检查流程,OnEnter内对网络请求成功、网络请求失败、资源加载完成事件进行了监听并设置了回调函数,在执行RequestVersion时,会获取当前设备信息以及平台信息,使用WWW打包数据后,进行发送,发送的地址在BuiltinDataComponent类内m_BuildInfoTextAsset外部连接数据里,这个Json表是直接在游戏对象BuiltinData上直接引用了对象。在接收到网络回复后,则会调用网络请求成功的回调函数OnWebRequestSuccess,这里对接收的数据进行了核实,并开启了第一个UI(DialogForm),以及游戏资源的加载。资源加载成功会回调OnResourceInitComplete。如果是网络请求失败则回调OnWebRequestFailure。当资源加载完毕后,OnUpdate会判断一下资源是否加载成功,如果成功则会使用ChangeState进入ProcedurePreload流程(同上)。注意:在离开ProcedurePreload流程时会在OnLeave对之前在OnEnter注册的事件进行释放。

Unity 主流游戏框架 unity游戏框架与架构入门_数据_05