找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

LimboAi行为树中使用await存在问题

如图一,是我一开始使用的行为树结构
图二是一开始的前摇任务脚本
过程中一直与预期不符
可以执行到前摇位置,但是始终到不了后面的任务,是进都不会进
检查之后发现awAIt好像会影响行为树正常使用
改变结构如图三,脚本改成图四之后都能满足预期执行
但是我还是想用await一劳永逸的方法,有没有大佬知道怎么办

LimboAi行为树中使用await存在问题-1.jpg

LimboAi行为树中使用await存在问题-2.jpg

LimboAi行为树中使用await存在问题-3.jpg

LimboAi行为树中使用await存在问题-4.jpg
回复

使用道具 举报

大神点评(5)

艾的民 楼主 7 小时前 显示全部楼层
为什么没人
LimboAi行为树中使用await存在问题-1.png
是不是解释的不清楚

直接一点就是,用await会导致行为树中断,想问问怎么能在LimboAi的行为树里正常用await
回复 支持 反对

使用道具 举报

ostsv 7 小时前 显示全部楼层
行为树节点它是要每帧都返回一个结果的,在await之前,你打算让他返回什么呢
回复 支持 反对

使用道具 举报

ostsv 7 小时前 显示全部楼层
我比较菜,不知道godot有什么别的异步方法,所以建议不要使用await。
如果你想要等待某个信号,可以在黑板给他设置状态值,或者去找找有什么更优雅的解决方法。
回复 支持 反对

使用道具 举报

艾的民 楼主 7 小时前 显示全部楼层
各位,我找到非常合适的解法了
如图
解释:await关键字并不是单纯将函数停在某个位置,而是将当前函数挂起,ai说会临时返回一个null,不过无法查证,因为不能随时读取一个协程函数(即直接或间接使用await)的返回值,但可以随时执行
因此,创建一个变量保存当前动作播放状态,初始为false,创建一个等待动画完成的协程函数,并在完成后将之前定义的变量改为true,那么只要在进入的时候执行一次协程函数,在_tick()中每次轮询中检测变量就行

LimboAi行为树中使用await存在问题-1.jpg

LimboAi行为树中使用await存在问题-2.jpg
回复 支持 反对

使用道具 举报

艾的民 楼主 7 小时前 显示全部楼层
行为树原理本质是每一帧检查状态,不能用await
回复 支持 反对

使用道具 举报

说点什么

您需要登录后才可以回帖 登录 | 立即注册
HOT • 推荐