1.Managing State
主要介绍:
状态(State,比如站立,跑,跳这三个就是状态);
有限状态机(Finite State Machines 是一种设计模式)的优点;
新概念:
①不使用FSM实现状态切换
状态切换如果只用if else或者switch case就很繁琐,有限状态机模式就为了解决这种情况。
有限状态机FSM又称状态机,状态机包含3个部分:一组可能的状态( a list of possible states),状态间的转换条件(the condition for transitioning between those states),初始状态(initial state)。
FSM的优点在于易读readability,易维护maintainability,易调试easy to debug,易扩展extensibility。
下面是一个使用if else和bool进行3状态切换(初始站立,跳jump和蹲下)的例子。
仅仅是3状态切换就需要考虑各自间的bool状态,如果添加进更多的状态切换,令人头大。
2.Finite State Machines
主要介绍:
怎样实现状态机
新概念:
①状态机的实现
状态机由3部分购成
即通过虚状态来连接context和concrete state。context表明当前是哪个状态,concrete state表示每个状态的操作和转换。
下面实现的状态是: initial state为Idle。idle摁a键进入ducking状态,idle摁b键进入jumping状态,在jumping状态摁c键进入spinning状态。只有在Idle状态下才能换武器。
即PlayerController_FSM为Context,PlayerBaseState为虚状态,下面的四个状态为具体状态。
PlayerController_FSM脚本(名字我写错了,内容一样的)
通过其他状态传递当前状态,然后只需要对当前状态操作就行。
PlayerBaseState脚本,即虚状态
PlayerIdleState脚本,具体状态之一,同时为初始状态。最下面有换武器的功能,注意换武器不是状态之一。
PlayerJumpingState脚本
PlayerDuckingState脚本
PlayerSpinningState脚本,注意这个类没有在PlayerController里初始化,原因写在里面。
有限状态机就是,通过虚状态的方式统一各种状态的格式, 在需要切换状态的脚本里约定每次只执行一种状态,避免各种bool,if,else。