推荐阅读
- CSDN主页
- GitHub开源地址
- Unity3D插件分享
- 简书地址
- QQ群:398291828
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录:
https://blog.csdn.net/q764424567/article/details/135831551
二、正文
2-1、介绍
流程(Procedure)
可以帮助我们管理游戏中的各个阶段。
在StarForce
示例项目中,将游戏划分为多个流程,对应游戏中的各个流程,在流程中进行切换:
Procedure
基于FSM状态机的思想,将每个流程看成一个状态,通过切换状态来执行不同的流程。
在每个流程中,设置回调函数,可以对流程进行控制和管理,比如下载的操作,等待下载完毕再切换状态。
2-2、使用说明
流程(Procedure)
的控制面板显示了项目中所有的Procedure
类实现,通过勾选来决定哪些Procedure
是启用的。
Entrance Procedure
代表游戏启动后的首个流程:
这些流程的功能说明了一下,实现就不说了,感兴趣的同学可以自行查看代码。
下面,就演示一下如何编写流程类。新建一个脚本命名随意,继承ProcedureBase类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityGameFramework.Runtime;
using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;
namespace StarForce
{
public class Test01 : ProcedureBase
{
public override bool UseNativeDialog
{
get
{
return true;
}
}
protected override void OnEnter(ProcedureOwner procedureOwner)
{
base.OnEnter(procedureOwner);
Debug.Log("进入流程");
}
protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
{
base.OnLeave(procedureOwner, isShutdown);
Debug.Log("离开流程");
}
protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
{
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
Debug.Log("状态轮询");
}
}
}
ProcedureBase
是流程的基类,继承自FsmState
,是一个状态机的状态类。
2-3、实现及代码分析
ProcedureManager.cs
ProcedureManager
是对流程的管理类。在Initialize
中初始化一个状态机,通过StartProcedure
开始一个流程,流程启动后只能通过流程内部进行流程切换。
namespace GameFramework.Procedure
{
/// 流程管理器。
internal sealed class ProcedureManager : GameFrameworkModule, IProcedureManager
{
private IFsm<IProcedureManager> m_ProcedureFsm;
/// 初始化流程管理器。
public void Initialize(IFsmManager fsmManager, params ProcedureBase[] procedures)
/// 开始流程。
public void StartProcedure<T>() where T : ProcedureBase
/// 是否存在流程。
public bool HasProcedure<T>() where T : ProcedureBase
/// 获取流程。
public ProcedureBase GetProcedure<T>() where T : ProcedureBase
}
}
ProcedureBase.cs
ProcedureBase
是流程的基类,继承自FSMState
,状态的生命周期跟游戏流程的生命周期对应:
namespace GameFramework.Procedure
{
/// 流程基类。
public abstract class ProcedureBase : FsmState<IProcedureManager>
{
/// 状态初始化时调用。
protected internal override void OnInit(ProcedureOwner procedureOwner)
/// 进入状态时调用。
protected internal override void OnEnter(ProcedureOwner procedureOwner)
/// 状态轮询时调用。
protected internal override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
/// 离开状态时调用。
protected internal override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown)
/// 状态销毁时调用。
protected internal override void OnDestroy(ProcedureOwner procedureOwner)
}
}
三、后记
如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。
你的点赞就是对博主的支持,有问题记得留言:
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦:
专栏 | 方向 | 简介 |
---|---|---|
Unity3D开发小游戏 | 小游戏开发教程 | 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。 |
Unity3D从入门到进阶 | 入门 | 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。 |
Unity3D之UGUI | UGUI | Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。 |
Unity3D之读取数据 | 文件读取 | 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。 |
Unity3D之数据集合 | 数据集合 | 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。 |
Unity3D之VR/AR(虚拟仿真)开发 | 虚拟仿真 | 总结博主工作常见的虚拟仿真需求进行案例讲解。 |
Unity3D之插件 | 插件 | 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等 |
Unity3D之日常开发 | 日常记录 | 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等 |
Unity3D之日常BUG | 日常记录 | 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。 |