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