State Machines
November 17, 2021About 1 min
State Machines
AI角色在游戏中一般都是一直做一样的事情,直到收到某个信息才会改变角色现在做的事情。这我们就可以使用状态机来制作。
A Basic State Machine
在一个状态中每个角色都有一个状态变量。一个行为对应着一个状态,并且有一系列的条件。当满足状态切换条件时,这个叫做触发(trigger)
,当切换到一个新的状态时,这叫激活(fired)

上图展示了一个简单的状态机:巡逻,战斗,逃跑。每个状态都有自己的一些条件。
Finite State Machines
有限状态机就是一般状态机。
The Problem
我们想要一个支持具有任何类型转换条件的任意状态机的一般系统。状态机将符合上述结构,并且同一时刻只占据一种状态。
The Algorithm
为了实现这个,我们可以使用一个通用的状态接口,并且状态中用条件。一个状态机有着一些可能进入的状态和记录着当前的状态。
在每一帧我们就更新状态机,状态机去更新当前状态,从而检测是否切换状态。
Pseudo-code
这里我们一帧去检测当前状态是已经被切换了,并且调佣特定的切换的方法。
class StateMachine:
# We’re in one state at a time.
initialState: State
currentState: State = initialState
targetState: State
# transfrom to next state
function transitionTo(state)
targetState = state
# Checks and applies transitions, returning current state actions.
function update()
currentState.update()
if targetState ! = null then
executeStateTransition()
# execute transition
funtion executeStateTransition()
currentState.exit()
currentState = targetState
currentState.OnTransitionTo = transitionTo
currentState.entry()
Data Structures and Interfaces
状态的接口:
class IState:
Action<IState> OnTransitionTo
function entry()
# do state actions
function update()
function exit()
Weaknesses
TODO: 腾讯课程