(七) 状态机设置

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值