这篇讲解如何使用第二篇中写好的类。
我们使用的是游戏角色的移动、跳跃、攻击、待机四个状态来讲,那么我们要构建出这四个状态,需要设计的模型是什么呢?
需要设计一个角色类、一个驱动角色实例的运行环境<Unity的MonoBehaviour就行了>。
那我们设计角色类,角色类中持有四个状态类的实例、一个状态机实例。
首先是四个状态类:
移动状态类(继承State类)
移动状态类中持有:
移动状态到跳跃的状态转换实例、移动状态到攻击的状态转换实例、移动状态到待机的状态转换实例
其中移动状态到跳跃状态需要考虑设计是否能在移动状态中跳跃,是否能在移动状态中实行攻击,是否能在移动状态中待机(当然不能在移动状态中待机了,边移动边待机是什么鬼)。
跳跃状态类(继承State类)
跳跃状态类中持有:
跳跃状态到其他三个状态类的转换实例
攻击状态类(继承State类)
攻击状态类中持有:
攻击状态到其他三个状态类的转换实例
待机状态类(继承State类)
待机状态类中持有:
待机状态到其他三个状态类的转换实例
然后在每个状态转换类中写判断条件,一般需要持有外部的判断对象,所以需要把外部的判断对象传入,比如实现这几个状态的转换判断,我们给角色类设计一个接受外部输入的属性<string keyBoard>,那么我们就要把角色类的实例传入所有状态转换实例中去,通过判断角色类的<keyBoard>属性做出转换状态的判断。
然后我们要在角色类的初始化中,把这些状态类、状态转换类、状态机类都初始化完。然后驱动状态机开始运行。于是整个状态机就跑起来了。
但是这样大家发现一个问题没有,就是状态越多,状态转换越多,并且是呈 n*(n-1)增长,虽然后面好维护,但是这样写的话,也会使状态转换类越来越多。我正在思考怎么减少这些状态转换类的数量。欢迎大家提出意见和建议,一起提高。
这篇把使用原理讲了,下篇给代码。