评论 6

迪波威 1年前

@李健行Immortality‍ 有两个问题还想请教下
1.常规攻击返回true后,是返回根节点重新判断,还是进入下一条报复性攻击进行判断
2.执行巡逻行为后,怎样退出该行为?是加计时器还是巡逻执行后又开始重新判断
3.攻击、巡逻、自卫三个行为之间的关系应该怎么写?

IMMO 1年前

@迪波威 ‍ 为什么at到了我,我就点了个赞,你是要at回答的人吧。我正好也在学AI行为树,趁大佬不在尽我之力回答一下。
1是返回根节点判断,只有常规攻击返回false的适合才进入选择节点。
2是一直循环,直到视野之内无玩家这个条件为false,即出现玩家了,则跳出巡逻到达下一个选择节点——自卫。
3这三个行为这么写是可以的。

迪波威 1年前

@李健行Immortality ‍ 2是巡逻行为循环,还是返回根节点判断这个步骤循环?

IMMO 1年前

@迪波威 ‍ 是我没说清楚。巡逻结点进行的时候,判断视野内没有玩家目标返回 true,执行巡逻行为,巡逻结点整体向根节点返回true。
但是我觉得这个行为树写得太简单有一些漏洞,或者还有其他机制没在图中写出。比如根节点是否循环,或者有 运行中 这个返回值,或者有 运行中依然检查其他的结点的状态。包括我说第三点 行为这么写是可以的仅仅指 攻击 巡逻 自卫 三个结点。它们下面的内容我觉得很有问题,要么是我没看懂。

明宗 [作者] 1年前

@迪波威 ‍ 首先,他这个编辑方式是错的,他把行为节点作为一个封装好的功能节点在用,比较常规的编辑方式是,条件和行为作为一个序列下的两个节点,也就是条件成功了,继续执行行为。
然后再假装他写的是对的
1,是到攻击玩家这个序列中执行下一个节点,也就是报复性攻击
2,按照他的写法,巡逻本身是一个行为,等同于攻击,所以是这个行为结束后退出并返回true。假如这个巡逻是个封装好的节点,里面是有一些别的逻辑来控制的,这个图里没有体现出来
3,这三个节点之间应该是选择,分别有自己的判断条件,在这个图里,根据节点一层层往里面看,各自的条件都写在最右侧绿色的部分了

再说一下那个巡逻。
第一,整个判断逻辑有三个条件,1,视野内有玩家,2,被玩家攻击,3,其他,这个巡逻实际上就是其他,理论上应该放在最后,而不是放个什么“没有发现玩家”。
第二,巡逻的节点用的是选择,所以他的逻辑是先看“视野内没有目标”这件事是否为true,如果true,则这个节点就返回true,就不会做下面的“巡逻”这个行为;如果“视野内没有目标”为false,他才会去尝试做“巡逻”这个行为。
所以你看,这个写法本身就是错的,最开始我还以为他那个判断是序列。

顺便,他应该是想实现这样的逻辑:1,看到玩家了,上去打;2,在看到玩家的时候,发狂了,就提升攻击频率(然而没有定义发狂是什么);3,在视野外被攻击了,看自己的生命值,多就打,少就跑;4,没看到玩家,没被攻击,就巡逻

明宗 [作者] 1年前

重复删除

登录奶牛关账号即可参与讨论