UGF学习1-流程

1. 什么是Procedure(流程)

流程是贯穿游戏运行时整个生命周期的有限状态机。
通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。

例如:

  • 对于网络游戏
    你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程
  • 对于单机游戏
    你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。

如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。

2. 流程的生命周期

游戏启动后会自动进入 默认流程 ProcedureLaunch 需要自己编写自定义流程并跳转

3. 使用流程的流程

  1. 新建脚本,脚本中的类需要派生自 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);
}
}
}
  1. 通过编译后,GameFramework->Procedure 的 Inspector 中会出现这个新增加的流程,勾选上这个流程,使之成为可用流程之一

    Entrance Procedure(入口流程)
    即为游戏开始的脚本。
    其余勾选的即为游戏里用得到的流程。
    其实流程没什么神秘的,他就像个状态机,游戏里的任一时刻只有一个状态
    比如你打开背包,就离开当前的大厅,进入背包流程,当你点击返回大厅按钮,就离开背包流程,进入大厅流程。切换场景也是如此。

  2. 使用 ChangeState 方法在主流程或其他流程上切入该流程
    ChangeState<ProcedureMain>(procedureOwner); // 切换流程到 ProcedureMain