所以我似乎误解了虚幻引擎状态树,这是我的布局的简化示例。基本上我有一个父状态,其输入条件为 true(在本例中为 SomeTaskThatNestedStatesRequire)。该输入条件分配有一个任务,该任务可以执行诸如过滤演员之类的任务。如果过滤器失败并且无法找到有效的目标。我想让状态跳转到空闲状态。我知道,如果您在状态树任务中调用“FinishTask”,如果我的理解正确的话,它会触发对树的重新评估。所以我想最好/正确的方法是设置一个状态,如果“过滤”任务失败,则跳过分支?
任务(在本例中为“STT_Find_Actor_Test”)可能是一项计算成本较高的任务,因此我不希望它在每次更新时都运行。这就是我使用输入条件的原因。也就是说,如果没有有效的参与者,在这种情况下寻找参与者的任务可能会失败。在这种情况下,我希望树进入空闲状态。当任务找不到任何内容时,我尝试在 STT_Find_Actor_Test 中调用“FinishTask”函数,希望我可以使用带有条件的转换来处理它,如下所示:
看似这些转换并不是为了处理到子状态的转换,因为在 STT_Find_Actor_Test 调用 FinishTask 时,“等待”状态似乎已经处于活动状态。
我认为我可以使用全局任务或评估器在每个刻度上运行 STT_Find_Actor_Test 并使用其结果来驱动输入条件,但正如我所说,其中一些任务的计算成本可能很高。
无论如何,如果有人知道“修复”,或者如果我做的完全错误,并且有更好的方法,我现在已经做好了一切准备!谢谢。
您现在可能已经弄清楚了一些事情,但如果您还没有弄清楚,您可能需要将“SomeTaskThatNestedStatesRequire”状态的“选择行为”更改为“尝试输入”。这样执行就不会自动跳转到其子状态。然后,当“SomeTaskThatNestedStatesRequire”成功时,您需要进行指向嵌套“等待”状态的转换。
顺便说一句,如果您决定采用全局任务路线,则无需在每个滴答声中执行该逻辑。解决此问题的一种方法是使用“Do Once”节点和“Delay”节点的组合,然后重置“Do Once”节点