我在实现我的行为树时遇到问题。我想我了解基础知识,但我被正在运行的事件所困扰,特别是如何停止它们(或者更确切地说如何不停止它们)
假设以下简单树:
Tree
while "talk_to_lady"
sequence
move_to_position
talk
while "dance"
sequence
dance_move_1
dance_move_2
序列中的所有节点都是运行时间较长的动作,因此返回运行状态直到完成。
假设舞蹈是真的,角色会跳舞,这很好。现在talk_to_lady 为真,这意味着角色应该去那里与她交谈。虽然该任务确实具有更高的优先级并且我确实希望它发生,但我仍然希望让角色在移动到talk_to_lady while 循环之前完成当前的舞蹈节点(即动画)(尽管可能有其他情况我会不想等)。
我的解决方案是让树在 dance_move 动作上调用 Abort() 方法,但如果这返回运行状态,它将忽略 talk 动作,直到 dance_move 动作返回成功或失败。此外,如果树中较高优先级的事件是另一个动作而不是 while 节点,则它可能已经做出了可能干扰 dance_move 动作的状态更改。
我是否遗漏了什么,或者有没有我没有读过的解决方案?