HTFramework框架使用手册(五)Procedure流程控制器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq992817263/article/details/86998412

Procedure模块简介

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

使用Procedure

自定义流程

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

推荐使用快捷创建方式:
Project界面右键 -> Create -> HTFramework -> Procedure Script
在这里插入图片描述
如下图,我创建了一个名为LoginProcedure的流程:(相应的实现函数将在此流程的对应生命周期中调用)

public class LoginProcedure : Procedure
{
    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>
    public override void OnEnter()
    {
        _loginPanel.SetActive(true);

        _logicEntity.Begin();
    }
    
    /// <summary>
    /// 离开流程
    /// </summary>
    public override void OnLeave()
    {
        _loginPanel.SetActive(false);

        _logicEntity.Stop();
    }

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

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

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

启用流程

创建流程以后,我们还需要在面板启用他,之后的工作便不需要我们去涉及了,什么时候创建流程对象,什么时候销毁对象,都将由框架自身来把控。
选中主预制体下的Procedure对象,在Procedure Manager的属性面板,点击Add Procedure便可以启用我们当前工程中存在的任何流程。
在这里插入图片描述

设置默认流程

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

切换流程

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

        //进入Game流程
        Main.m_Procedure.SwitchProcedure<GameProcedure>();

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

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

猜你喜欢

转载自blog.csdn.net/qq992817263/article/details/86998412