当角色处于状态机的某个状态时,如何限制其同时进入其它状态

可解决的问题:避免角色处于某一状态后又因为玩家的其他操作使角色在进入这一状态的同时又进入了其它状态从而导致出现意想不到的bug以及角色动作违和的情况。

基本思路:创建一个状态机行为脚本,并在状态机行为脚本和角色控制脚本(PlayerController)中分别定义好角色需要避免进入的状态变量,当进入某一状态时就通过改变状态机行为脚本的状态变量值的方式向角色控制脚本发送避免进入某些状态的指令,当该状态退出时再将状态变量重置。

示例需求:当角色进入攻击状态后就不能再进入任何其它状态。操作过程及代码示例如下:
1.先在AttackState状态下创建添加一个PlayerInputStateController脚本:

2.在角色控制(PlayerController)和PlayerInputStateController脚本中定义需要避免进入的状态变量:

3.在PlayerInputStateController中的OnStateEnter以及OnStateExit方法中获取PlayerController脚本的引用并设置PlayerControllerr脚本中定义的状态变量值:

4.找到PlayerController脚本的角色攻击方法并加入状态开关,其它状态也可进行同样的操作:

5.代码写好后返回unity,此时AttackState状态下挂载的PlayerInputStateController脚本已经出现了刚才写好的状态开关,不想进入哪个状态就在哪个状态旁打勾即可:

6.如果需要对其它状态进行类似的处理只需要把这个PlayerInputStateController脚本再挂载到要处理的状态下并设置状态开关就可以了。

小tips:创建PlayerInputStateController脚本时在相应状态的Inspector窗口中创建并添加即可,这样创建好后就会自动继承StateMachineBehaviour并写好需要的方法。日后整理代码只需要在项目里找到PlayerInputStateController脚本并把它拖到Scripts文件夹里就行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值