unity游戏开发:FSM状态机的简单实现

本文介绍了在Unity游戏中使用有限状态机(FSM)来管理角色状态的方法。FSMSystem类包含角色的各种状态,如Idle、Chase和Attack,并通过Reason方法判断状态转换条件,Act方法执行对应状态的行为。通过配置角色、敌人和导航组件,可以轻松实现FSM状态机。
摘要由CSDN通过智能技术生成

角色的有限状态 :

 

此类表示有限状态系统中的状态。
每个状态都有一个字典,其中有成对的(transition-stateID)显示
如果在此状态下触发转换,则FSM应该处于哪个状态是当前状态。
方法Reason用于确定触发的条件
方法Act具有执行角色在此状态下应执行的操作的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//状态转换条件
public enum CubeTransition
{
    NullTansition,
    SeeEnemy,
    NoEnemy,
    CanAttack
}

//状态的ID
public enum CubeStateID 
{
    NullState,
    Idle,
    Chase,
    Attack
}
/// <summary>
/// 此类表示有限状态系统中的状态。
/// </summary>
public abstract class ICubeState  {

    protected Dictionary<CubeTransition, CubeStateID> mMap = new Dictionary<CubeTransition, CubeStateID>();
    protected CubeStateID mStateID;
    protected CubeFSMSystem mFSM;
    public CubePlayer mPlayer;

    public CubeStateID StateID { get { return mStateID; } }

    public ICubeState(CubeFSMSystem fsm,CubePlayer player)
    {
        mFSM = fsm;
        mPlayer = player;
    }

    public void AddTransition( CubeTransition trans,CubeStateID id)
    {
        if (trans == CubeTransition.NullTansition)
        {
            Debug.LogWarning("当前状态CubeTransiton为空 :"+trans);
            return;
        }

        if (id == CubeStateID.NullState)
        {
            Debug.LogWarning("当前状态ID : CubeStateID为空:" + id);
            return;
        }

        if (mMap.ContainsKey(trans))
        {
            Debug.LogWarning("当前状态:" + trans +" 已经添加过了");
            return;
        }
        mMap.Add(trans,id);
    }

    public void DelectTransition(CubeTransition trans)
    {
        if (mMap.ContainsKey(trans) == false)
        {
            Debug.LogError("删除转换条件的时候, 转换条件:[" + trans + "]不存在");
            return;
        }
        mMap.Remove(trans);
    }

    public CubeStateID GetOutPutStateID(CubeTransition
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值