Unity3D-FSM的简单实现

来源:互联网 发布:岳阳开淘宝网店培训班 编辑:程序博客网 时间:2024/05/18 04:04
public enum BossStateType{    Run,     Attack,    Die}public class State {    public virtual void EnterState() { }    public virtual void UpdateState() { }    public virtual void ExitState() { }}public class BossState : State {    public BossStateMachine machine;}public class BossRunState : BossState{    public override void EnterState()    {    }    public override void UpdateState()    {    }    public override void ExitState()    {    }}public class BossAttackState : BossState{    public override void EnterState()    {    }    public override void UpdateState()    {    }    public override void ExitState()    {    }}
using UnityEngine;using System.Collections.Generic;public class BossStateMachine  {    private Dictionary<BossStateType, BossState> _dic = new Dictionary<BossStateType, BossState>();    private BossState _currentState;    private BossState _lastState;    public Boss boss;    public BossStateMachine(Boss boss)    {        this.boss = boss;    }    public void Register(BossStateType key,BossState value)//注册状态    {        if(!_dic.ContainsKey(key))        {            value.machine = this;            _dic.Add(key, value);        }    }    public void ChangeState(BossStateType key)//改变当前状态    {        if (_dic.ContainsKey(key))        {            _currentState = _dic[key];        }        else        {            Debug.Log("转换失败");        }            }    public void DoWork()    {        if(_currentState != _lastState)//进入状态        {            _currentState.EnterState();            _lastState = _currentState;        }        _lastState.UpdateState();//更新下一状态        if(_lastState != _currentState)        {            _lastState.ExitState();//退出状态        }    }}
原创粉丝点击