• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱

在坦克大战Demo中无法触发事件

0 喜欢 0 不喜欢
171 浏览

 

初始的行为树如图,就是在示例代码中加入了一个事件,个人觉得在调用事件时应该处于Running:image

image

在行为树行为正在进行(随即开火)的时候使用FireEvent("testTask");不能切换行为树到:

image

 

FireEvent的代码确定是在行为树外部调用的,在关卡的一个GameObject上绑定了test.cs的脚本:

void Update () {
   if (Input.GetKeyDown(KeyCode.O))
   {
         Player player = FindObjectOfType<Player>().GetComponent<Player>();
         player.FireEvent("testTask");
   }

}

调试发现onevent中m_currentTask为null,进入CheckEvent后m_events为null,因此没有switchTo直接返回了。因此没有相应任何事件方法。

 

 

<!--StartFragment -->

最新提问 7月 14, 2016 用户: normandy10 (180 分)
修改于 8月 2, 2016 用户:jonygli

2 个回答

1 喜欢 0 不喜欢
 
已采纳
在FireEvent前调用一次btexec(),如果树处于Running状态,则-1节点上的m_currentTask不为空,指向阻塞的节点,然后在oneventCurrentNode中开始往根节点回溯,走到带testTask的序列节点上时,其m_events列表不为空,CheckEvent会执行。

一定要确保树在Running状态!!!
最新回答 7月 15, 2016 用户: qq_577361708ac21 (600 分)
采纳于 7月 15, 2016 用户:normandy10
0 喜欢 1 不喜欢
你可以先试试连调,看看高亮执行路径
最新回答 7月 14, 2016 用户: cainhuang (33,810 分)

image调试就是这个状态,调用FireEvent,代码那边会进断点,确定是调用了。但是调用了之后行为没有发生任何改变,父节点那边也一直维持Running的。

求解啊~~~
碰到和你类似的问题,跟了一天代码,找到了原因,希望能帮到大家。

原因就是类似“循环(-1)”这样的装饰节点,它的m_currentTask一直为空,导致它后面的所有节点没有机会触发所发出的事件。这些官方文档中也没找到相关说明,应该也算个坑吧!
...