在Unity中实现有限状态机

在Unity中实现有限状态机

在Unity中实现有限状态机

字数452 阅读624 评论0
收藏文章 分享

简介

有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 -- 引用百度百科的解释:

有限状态机(FSM)是游戏AI的一种常用模型,我做一个简单的记录,在Unity中实现有限状态机模型.

FSM的结构和逻辑

整体结构分为4个部分

  • AIController
  • FSM
  • IState
  • MoveState, AttackState, IdleState, DieState
    解释:
    1.其中AIController用于实现各种行为动作,它作为AI行为动作的控制器.
    2.FSM用于存放判断参数和统一调用各状态机
    3.IState状态机接口,等待各种状态机实现其功能
    4.各种State,每个状态机内部实现开关逻辑

    实现FSM

    创建一个AIController

    创建一个AIController,绑定在怪物身上,用于控制怪物做什么事情
public class AIController : MonoBehaviour {
    public FSM fsm;
    void Start () {
        fsm = GetComponent<FSM> ();
        fsm.ac = this;
        //初始化一个默认状态机
        fsm.ChangeState(new MoveState());
    }
    public void Move(){
        Debug.Log("move");
    }
    public void Attack(){
        Debug.Log("attack");
    }

创建一个FSM

FSM用于传递状态机,创建一个FSM绑定在怪物身上

public class FSM : MonoBehaviour {

    public IState currentState{ get; private set;}
    public bool isCanAttack;
    public bool isCanMove;
    public AIController ac;
    void Start () {

    }

    public void ChangeState(IState newState){
        currentState = newState;
    }

    void Update () {
        if (currentState != null && ac != null) {
            currentState.Execute (ac);
        }
    }
}

创建一个状态机接口:IState

public interface IState{
    void Execute(AIController ac);
}

创建多个状态机

在状态机中实现判断和调用AIController的行为方法
MoveState:

public class MoveState : IState {
    public void Execute (AIController ac)
    {
        if (ac.fsm.isCanMove) {
            ac.Move();
        }
        else {
            ac.fsm.ChangeState(new IdleState());
        }
    }
}

AttackState:

public class AttackState : IState {
    public void Execute (AIController ac)
    {
        if (ac.fsm.isCanAttack) {
            ac.Attack();
        }
        else {
            ac.fsm.ChangeState(new MoveState());
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值