1. 写一个基础的公共父类比如
public abstract class EnemyBaseState
{
public abstract void EnterState(Enemy enemy);
public abstract void OnUpdate(Enemy enemy);
}
2. 继承该父类,实现对应方法
public class PatrolState : EnemyBaseState
{
public override void EnterState(Enemy enemy)
{
enemy.SwitchPoint();
}
public override void OnUpdate(Enemy enemy)
{
if (Mathf.Abs(enemy.transform.position.x - enemy.targetPoint.position.x) < 0.01f)
{
enemy.SwitchPoint();
}
enemy.MoveToTarget();
}
}
3. 通过OnUpdate建立与主场景帧刷新的link
//Enemy.cs
void Update()
{
currentState.OnUpdate(this);
}
4. 在特定情况下对状态进行更改, 更改后通过EnterState修改或还原初始状态的需要完成的
//Enemy.cs
public void TransitionToState(EnemyBaseState state)
{
currentState = state;
currentState.EnterState(this);
}
5. 按从主场景传过来的对应组件的函数,来控制该组件的行为变化,反应在该状态中
//PatrolState.cs
enemy.SwitchPoint();
enemy.MoveToTarget();