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 就会迅速膨胀,这种时候就可以换成接口写法的状态机。