GameFramework框架——FSM和Procedure的底层调用梳理

Fsm和Produce的创建流程

请添加图片描述

ChangeState的实际底层调用

请添加图片描述

Procedure的五个生命周期的底层调用

请添加图片描述

底层创建的简洁的概述

1.ProcedureComponentInspector获取所有继承ProcedureBase的字符串数组
2.ProcedureComponent会根据第一步获取的字符串数组通过反射获取ProcedureBase[],进行ProcedureManager的初始化
FsmComponent进行FsmManager的初始化
3.ProcedureManager的初始化用ProcedureBase[]会对成员FsmManager进行初始化(这里会传一个this,也就是后续的T):
4.FsmManager的初始化会调用Fsm的Create函数去创建,这里有几个强转(ProcedureBase转FsmState,T是ProcedureManager)
5.Fsm的Create将ProcedureBase[]转成,FsmState>的字典,方便change state。并执行每个state的oninit函数.

相关类的解释

1.ProcedureOwner
是GameFrameWork.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>的别名,这个别名实际上就是Fsm 这么写只是为了方便使用或者封装

2.IProcedureManager
这个借口的实现只有ProcedureManager,是在ProcedureComponent中利用反射加载的
是GameFramework.Procedure命名空间下的一个接口,有两个参数
一个是ProcedureBase(当前流程),
一个是CurrentProcedureTime(当前流程持续时间)。
有四个要求实现的功能:
初始化流程管理器:Initialize(IFsmManager, params ProcedureBase[])//
开始流程:StartProcedure有两个版本:
StartProcedure() where T : ProcedureBase;//要求指定的类型继承ProcedureBase
StartProcedure(Type procedureType);//非泛型模式
是否存在流程(bool):
HasProcedure() where T : ProcedureBase;//要求指定的类型继承ProcedureBase
HasProcedure(Type procedureType);//非泛型模式
获取流程:
GetProcedure() where T : ProcedureBase;//要求指定的类型继承ProcedureBase
GetProcedure(Type procedureType);//非泛型模式

3.ProcedureBase
分为主游戏命名空间下的和GameFramework.Procedure
主游戏空间下的:
继承于GameFramework.Procedure可以添加某些值进行封装
GameFramework.Procedure下的:
继承于GameFramework.Fsm.FsmState并重写了FsmState中的生命周期方法,但是机会没有重写。
我的理解是:只是锁定了FsmState中的T是IProcedureManager,简化了版本,封装了一层。

5.IFsm
这个类的实现只有一个,Fsm,是在Fsm.Create中进行强制转换的

6.Fsm
这个类实现了IFsm,FsmBase,IReference
实现IFsm主要是为了上层的Procedure
实现FsmBase主要是为了存字典作为值
实现IReference主要是为了引用池回收,来调用onDestroy生命周期方法

8.IFsmManager
这个类是一个接口,他只有一个实现类FsmManager,是在FsmComponent利用GameFrameworkEntry.GetModule,里面是一个反射去掉了第一个字符

9.FsmState
这个类是ProcedureBase最底层的基类,T是Fsm,也就是owner

10.FsmComponent
间接继承自MonoBehaviour,拥有生命周期
负责完成FsmManager的初始化

11.ProcedureComponent
间接继承自MonoBehaviour,拥有生命周期
负责完成ProcedureManager的初始化

12.ProcedureComponentInspector
ProcedureComponentInspector类从程序集里面获取所有procedurebase为基类的子类名称(字符串数组),并加载到procedure的检视面板上(实际是ProcedureComponent)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GameFramework是一个基于Unity引擎的游戏框架,它主要对游戏开发过程常用模块进行了封装,以规范开发过程、加快开发速度并保证产品质量。该框架适用于所有Unity 5.3.0及以上的版本。\[1\] 在GameFramework,有一个名为ProcedureComponent的组件,它负责管理游戏的流程。在该组件的Start方法,会初始化流程状态机,并进入第一个默认状态Launch。\[2\] 在使用GameFramework框架时,可以编写自定义的流程脚本。例如,在一个名为ProcedureExample的流程脚本,可以重写OnEnter方法,在进入该流程时执行一些逻辑。在示例,通过Utility.Text.Format方法生成欢迎消息,并使用Log类的不同级别方法打印日志信息,包括调试级别、信息级别、警告级别、错误级别和严重错误级别。\[3\] 总之,GameFramework是一个功能强大的游戏框架,它提供了许多封装好的模块和组件,可以帮助开发者更高效地进行游戏开发。 #### 引用[.reference_title] - *1* *3* [【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)](https://blog.csdn.net/jiebaoshayebuhui/article/details/128639533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [GameFramework框架详解之 Fsm状态机](https://blog.csdn.net/qq563129582/article/details/129794646)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值