1. 什么是Procedure(流程)
流程是贯穿游戏运行时整个生命周期的有限状态机。
通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。
例如:
- 对于网络游戏
你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程
- 对于单机游戏
你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。
如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。
2. 流程的生命周期
游戏启动后会自动进入 默认流程 ProcedureLaunch 需要自己编写自定义流程并跳转
3. 使用流程的流程
- 新建脚本,脚本中的类需要派生自 ProcedureBase 类。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| using GameFramework.Procedure; using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>; namespace Game { public class ProcedureMain : ProcedureBase { protected override void OnInit(ProcedureOwner procedureOwner) { base.OnInit(procedureOwner); } protected override void OnEnter(ProcedureOwner procedureOwner) { base.OnEnter(procedureOwner); } protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds) { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); } protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown) { base.OnLeave(procedureOwner, isShutdown); } protected override void OnDestroy(ProcedureOwner procedureOwner) { base.OnDestroy(procedureOwner); } } }
|
通过编译后,GameFramework->Procedure 的 Inspector 中会出现这个新增加的流程,勾选上这个流程,使之成为可用流程之一
Entrance Procedure(入口流程)
即为游戏开始的脚本。
其余勾选的即为游戏里用得到的流程。
其实流程没什么神秘的,他就像个状态机,游戏里的任一时刻只有一个状态
比如你打开背包,就离开当前的大厅,进入背包流程,当你点击返回大厅按钮,就离开背包流程,进入大厅流程。切换场景也是如此。
使用 ChangeState 方法在主流程或其他流程上切入该流程
ChangeState<ProcedureMain>(procedureOwner); // 切换流程到 ProcedureMain