流程
1.介绍
流程是这个框架比较重要的一个概念,我们以下图(有箭头指向的每个方块都是一个流程)为例,假设我们现在有一个游戏么,有两种玩法,一是自由行动, 玩家可以在一个大地形中看风景,与NPC交谈;二是战斗,玩家搭建自己的战斗队形迎战来敌。
正常玩游戏的时候当然是先进菜单选择,选择游戏模式后进入不同的玩法。但我们在开发过程中如果每次都要从开始界面进入就太麻烦了,我们应当可以从任何一个关键点进入游戏,这就引入了流程的概念。当然,这就需要我们在设计的时候每个流程尽量不依赖于之前的流程,比如下图的自由行动,与它相关的配置项应当在游戏一开时就配制好或者在该流程开始时配置,而不能在菜单选择的时候配置该流程所必须的东西。
当然也有其他情况,比如下图的战斗流程,假设我们战斗系统在开始前必须进行一些战斗配置,而这又是两个不一样的流程,那么我们在进入战斗之前必须先进入战斗配置也是没有问题的,但是,战斗配置和自由行动一样,不可以依赖于菜单选择。当然,如果我们在战斗系统未进行配置的时候给它一个默认配置也就可以直接进入战斗了。具体情况具体对待吧。
2.流程的选择
场景中挂载一个Game脚本,它不会随着场景切换而销毁,在点Play之前从这里选择当前要进入的流程
3.流程的忽略
一个流程如果必须要依赖于别的流程使用的话,则不应该被选择为开始流程,可以给该流程类添加HideInEditor
属性,这样就不会在Game脚本的Inspector面板上出现。
4.流程切换
流程的开始框架已经自动做了,现在你只需要在合适时候调用流程管理器的流程切换就可以了。
/// <summary>
/// 流程切换
/// </summary>
/// <typeparam name="TProcedure"></typeparam>
public void ChangeProcedure<TProcedure>() where TProcedure : ProcedureBase
{
m_Fsm.ChangeState<TProcedure>();
}