麦克雷 Mavom.cn

标题: LimboAi行为树中使用await存在问题 [打印本页]

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

(, 下载次数: 0)

(, 下载次数: 0)

(, 下载次数: 0)

(, 下载次数: 0)
作者: 艾的民    时间: 昨天 12:39
为什么没人
(, 下载次数: 0)
是不是解释的不清楚

直接一点就是,用await会导致行为树中断,想问问怎么能在LimboAi的行为树里正常用await
作者: ostsv    时间: 昨天 12:39
行为树节点它是要每帧都返回一个结果的,在await之前,你打算让他返回什么呢
作者: ostsv    时间: 昨天 12:40
我比较菜,不知道godot有什么别的异步方法,所以建议不要使用await。
如果你想要等待某个信号,可以在黑板给他设置状态值,或者去找找有什么更优雅的解决方法。
作者: 艾的民    时间: 昨天 12:40
各位,我找到非常合适的解法了
如图
解释:await关键字并不是单纯将函数停在某个位置,而是将当前函数挂起,ai说会临时返回一个null,不过无法查证,因为不能随时读取一个协程函数(即直接或间接使用await)的返回值,但可以随时执行
因此,创建一个变量保存当前动作播放状态,初始为false,创建一个等待动画完成的协程函数,并在完成后将之前定义的变量改为true,那么只要在进入的时候执行一次协程函数,在_tick()中每次轮询中检测变量就行

(, 下载次数: 0)

(, 下载次数: 0)
作者: 艾的民    时间: 昨天 12:41
行为树原理本质是每一帧检查状态,不能用await




欢迎光临 麦克雷 Mavom.cn (http://www.mavom.cn/) Powered by Discuz! X3.5