BehaviorDesigner LowerPriority Bug及解决方案

这个问题到底是不是一个Bug还不好说,因为是非正规渠道获取的插件,所以没法去论坛提问.我给Support去了一封邮件,不过目前还没有得到答案.

QQ20171224-173639

1
2
3
4
5
6
7
8
9
public class RunAfterTwoSecond : Conditional
{
public override TaskStatus OnUpdate()
{
if (!(Time.time > 2f)) return TaskStatus.Failure;
Debug.Log("RunAfterTwoSecond check is TRUE, should run next task");
return TaskStatus.Success;
}
}

如图所示. 逻辑首先会执行TreeB,然后2秒以后.TreeA的判断逻辑会触发成功(因为设置了LowerPriority)

此时会执行一遍TreeA,因为最终结果有Return Failure的装饰.所以又会执行TreeB

此时TreeA的条件会一直触发返回TRUE,但是TreeA不会再次运行.

这个Bug触发的条件有两个,一个是RunAfterTwoSecond在2秒以后恒定返回TRUE,且后续逻辑执行导致整个Tree返回了Failure.

第二个条件是,后续的条件逻辑返回的是TaskRunning. 所以导致整个Selector逻辑卡死在同一个loop中.

暂时绕开的解决方案如图:

QQ20171224-173552

每个有LowerPriority判断的子树,除了需要不停做判断的Conditional以外全部都设置到一个永远返回Success的Deco下面

坚持原创技术分享,您的支持将鼓励我继续创作!