更新日期:2019年9月26日。
Github源码:​​​[点我获取源码]​​​ Gitee源码:​​[点我获取源码]​

索引

  • ​​Procedure模块简介​​
  • ​​使用Procedure​​
  • ​​自定义流程​​
  • ​​启用流程​​
  • ​​设置默认流程​​
  • ​​切换流程​​
  • ​​运行时检视面板​​

Procedure模块简介

Procedure是框架的核心模块,也是最基本的模块,他贯穿整个框架的始终,从框架的生命周期开始,到生命周期结束,都会在流程间完成,同时,他又是一个强化版的有限状态机,当在多个流程间切换直至最终流程时,便代表整个系统的结束。

使用Procedure

自定义流程

使用Procedure前,必须自定义流程,比如最常见的流程结构:登录流程 > 选角流程 > 加载资源流程 > 场景xx流程…
由于框架不自带任何流程,我们必须要为不同阶段的逻辑划分不同的流程,创建流程,需要自定义类并继承至ProcedureBase。

推荐使用快捷创建方式:

Project界面右键 -> Create -> HTFramework -> C# Procedure Script

【Unity】 HTFramework框架(五)Procedure流程控制器_流程控制


如下图,我创建了一个名为LoginProcedure的流程:(相应的实现函数将在此流程的对应生命周期中调用)

public class LoginProcedure : ProcedureBase
{
private GameObject _loginPanel;
private LoginLogic _logicEntity;
private string _userName;
private string _password;

/// <summary>
/// 流程初始化
/// </summary>
public override void OnInit()
{
_logicEntity = new LoginLogic();
_userName = "张三";
_password = "123456";
}

/// <summary>
/// 进入流程
/// </summary>
/// <param name="lastProcedure">上一个离开的流程</param>
public override void OnEnter(ProcedureBase lastProcedure)
{
_loginPanel.SetActive(true);

_logicEntity.Begin();
}

/// <summary>
/// 离开流程
/// </summary>
/// <param name="nextProcedure">下一个进入的流程</param>
public override void OnLeave(ProcedureBase nextProcedure)
{
_loginPanel.SetActive(false);

_logicEntity.Stop();
}

/// <summary>
/// 流程帧刷新
/// </summary>
public override void OnUpdate()
{
_logicEntity.Update();
}

/// <summary>
/// 流程帧刷新(秒)
/// </summary>
public override void OnUpdateSecond()
{

}
}

1.OnInit():流程的初始化工作请在这里完成,他将于任何自定义MonoBehaviour脚本的Start生命周期之前执行。
2.OnEnter():每次切换到当前流程的时候触发一次。
3.OnLeave():每次从当前流程切换至其他流程的时候触发一次。
4.OnUpdate():如果当前流程处于激活中,他将每帧触发一次,当前激活的流程只能有一个。
5.OnUpdateSecond():如果当前流程处于激活中,他将每秒触发一次。

启用流程

创建流程以后,我们还需要在面板启用他,之后的工作便不需要我们去涉及了,什么时候创建流程对象,什么时候销毁对象,都将由框架自身来把控。

选中主预制体下的Procedure对象,在Procedure Manager的属性面板,点击Add Procedure便可以启用我们当前工程中存在的任何流程。

【Unity】 HTFramework框架(五)Procedure流程控制器_Unity_02

设置默认流程

第一个被启用的流程将会自动被设置为默认流程,后面可以手动将任意流程设置为默认流程,框架启动后会首先进入默认流程,如要切换至其他流程,该流程也必须是在此面板启用的流程。

如下,此时的默认流程为InitProcedure流程。

【Unity】 HTFramework框架(五)Procedure流程控制器_自定义_03

切换流程

理论上来说一个流程永远不会被终结,除非整个系统停止,所以他可以在任何时候被激活,想要激活某个流程,直接切换至该流程即可。
选择在恰当的时机调用如下语句:

//进入Game流程
Main.m_Procedure.SwitchProcedure<GameProcedure>();
//进入下一流程(根据检索面板的流程列表顺序)
Main.m_Procedure.SwitchNextProcedure();
//返回上一流程(根据检索面板的流程列表顺序)
Main.m_Procedure.SwitchLastProcedure();

当然,也可以直接获取流程对象,进行一些自定义的操作,这里需要你自己去扩展每一个流程类:

GameProcedure game = Main.m_Procedure.GetProcedure<GameProcedure>();

运行时检视面板

在编辑器中运行时将会出现运行时检视面板(Runtime Data),主要用以调试或数据监测,目前面板如下:

【Unity】 HTFramework框架(五)Procedure流程控制器_ide_04


1.Current Procedure:当前所处的流程。

2.Procedures:所有激活的流程列表,点击Switch按钮可以模拟切换到该流程。