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();
}
}
}