Unity3DBehaviorDesigner行为树4打断机制的实现

更新时间:2023-05-23 09:42:58 阅读: 评论:0

Unity3DBehaviorDesigner⾏为树4打断机制的实现守护甜心37
环境:Unity2018.3 语⾔:C#
上篇⼩作业解答:
Behavior Manager在Disable之后直接运⾏会⽣成⼀个新的Behavior Manager。
总起:
⾏为树的节点不总是从上⾄下从左⾄右顺序执⾏的,在复合节点上有⼀个Abort Type参数。
英国 公投
刘一男考研词汇5500该参数可以决定复合节点下的条件节点状态发⽣变化时,是否能打断当前⼦节点(lf)、优先级⽐⾃⼰低的节点的执⾏(Lower Priority)。
打断机制:
⾏为树中拥有许多容器变量:tribunal
1. taskList,所有的Task节点;
2. conditionReevaluate,条件节点的状态缓存;
3. activeStack,当前运⾏中Task的堆栈,⾏为树在启动时会新建⼀个,在碰到每个并⾏分⽀时会新建⼀个。on more
妊妇⾏为树的每次执⾏时⼀次Tick,最终会执⾏到当前在执⾏Task的OnUpdate,但是在此之前会执⾏ReevaluateConditionalTasks⽅法将当前缓存的条件节点重新判断⼀遍。
inconclusion
具体的判断如下:
从conditionReevaluate获取需要判断的条件节点后,执⾏⼀次OnUpdate,如果其返回值与存储的状态不同,则开始打断。
将需要打断的任务从activeStack中弹出,并将正在运⾏中任务的结果置为Failure。
最后从当前节点往上追溯,调⽤其所有节点的OnConditionalAbort,并更新条件节点NodeData中的InterruptTime——被打断的时间。
打断的条件:
上⼩结中介绍了打断的基本流程,其中打断类型有四种:None、Self、LowerPriority、Both。
⾏为树中条件状态缓存conditionReevaluate,在条件节点运⾏时会加⼊该容器,但是有两个条件:
ever since
1. 该Task必须继承Conditional,也就是条件节点(其实Conditional和Action的运⾏⽅式基本等同,如果不需要打断的功能Action节
点完全可以替代Conditional节点。所以打断功能应该就是Conditional节点和Action节点的本质区别);
2. AbortType必须不是AbortType.None。
加⼊到缓存中时,如果不是LowerPriority则会记录compositeParentIndex⽗复合节点的索引,否则为-1。
这边就有些奇怪了,因为在执⾏打断流程前有个判断:
ppmm是什么意思
也就是说LowerPriority类型初始值并不会打断。断点看⼀下:
英语作业本八下答案只要Task运⾏过便会进⾏赋值,⽽打断时conditionReevaluate会重置。

本文发布于:2023-05-23 09:42:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/743552.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:计算机DOS试题
下一篇:ICAO4—opi题
标签:打断   节点   条件   状态   需要   时会   任务
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图