实现NPC的AI-有限状态机

在代码编写方面,使用有限状态机可以避免代码中使用大量的if-else语句。

有限状态机里每个状态包含三个方法,进入,更新,退出。

public abstract class BaseState
{
    public abstract void Enter();
    public abstract void Update();
    public abstract void Exit();
}

状态机:

public class StateMachine
{
    private BaseState _currentState;

    public void Update()
    {
        _currentState.Update();
    }

    public void ChangeState(BaseState state)
    {
        if (_currentState == state)
        {
            return;
        }

        _currentState?.Exit();
        _currentState = state;
        _currentState.Enter();
    }
}

每种状态实现BaseState,例如RunState

public class RunState : BaseState
{
    public override void Enter()
    {
        // 播放run动画
    }

    public override void Update()
    {
        // 每帧更新,判断是否到达目标点
    }

    public override void Exit()
    {
        // 重置一些变量
    }
}
返回顶部