162 字
1 分钟
极简状态机
状态机代码
public enum EnemyState { Idle, Chase, Attack }
public class Enemy : MonoBehaviour{ public EnemyState State { get{} private set { if(State != value) { StateExit(); State = value; StateEnter(); } } }
private void Start() { State = EnemyState.Idle; }
public void SwitchState(EnemyState newState) { State = newState; }
private void StateEnter() { switch(State) { case EnemyState.Idle: break; case EnemyState.Chase: break; case EnemyState.Attack: break; } }
private void StateExit() { switch(State) { case EnemyState.Idle: break; case EnemyState.Chase: break; case EnemyState.Attack: break; } }
private void Update() { switch(State) { case EnemyState.Idle: break; case EnemyState.Chase: break; case EnemyState.Attack: break; } }
private void FixedUpdate() { switch(State) { case EnemyState.Idle: break; case EnemyState.Chase: break; case EnemyState.Attack: break; } }}这样做的缺点是一旦状态一多,switch 就会迅速膨胀,这种时候就可以换成接口写法的状态机。