概述

behaviac作为图形化的脚本,设计上是用来调用代码(c++,c#)提供的方法,在调用这些方法的时候会有些额外消耗,该消耗已经被充分优化,可以参考消耗

实践中,要尽量把需要计算的操作由代码实现,通过方法提供给behaviac,behaviac只是去选择这些方法,behaviac作为选择者,发挥behaviac灵活直观的优势。

设计

要想高效的使用behaviac,首先要有好的设计,需要什么Agent,Agent需要有什么属性,什么方法,有一个好的接口。所谓好,是指不能太底层,也不能太高层。

  • 太底层,意味着需要进行很多小的计算
  • 太高层,意外着失去了灵活性

底层的计算要尽量在代码(c++或c#)实现。behaviac用来做策略选择。

behaviac虽然提供了Assignment,Compute,Compare,IfElse等节点,允许做一些“小的”计算,允许就像写代码一样进行if else的基本选择,但不鼓励这样做。鼓励使用Selector,Sequence,前置,后置等节点及附件。

持续运行的动作

Agent提供的方法,最好是能够持续运行的方法,比如,播放动画,移动一段距离,都是持续很多帧的动作;而不是只是返回某个值,然后再需要在行为树里根据该值做比较,进行计算,再执行其他小的一帧触发的方法。

持续运行的节点在下一帧会被持续继续执行,behaviac不会愚蠢的每一帧都从根节点重新执行。但是,不好的行为树(只是简单的成功或失败,没有返回运行的节点)就会迫使behaviac每一帧都不得不从根节点重新选择。可以参考行为树的基本概念及进阶

持续运行的动作往往需要大量计算,由代码(c++或c#)实现,behaviac只是在高层去选择使用它,避免大量的计算。这样子,利用behaviac的灵活直观的优势而不会有性能的损失。

并行及选择检测节点

选择监测节点以及并行节点用起来很方便,但是需要提醒的是,相比其他节点,这两个节点比较费。

并行节点每次更新都会更新它所有的子节点(子树),选择监测节点也是如此。不仅如此,这两个节点还会导致接管所在树对处于运行状态节点的控制,形成多一级的控制。(不理解没关系,总之,比其他节点更费。)

不是说这两个节点不能用,但是使用起来请注意其性能,特别的不能滥用,最好不要嵌套这两个节点。

发布版

当发布版本或测量性能的时候,可以定义宏BEHAVIAC_RELEASE关闭开发功能,这样子性能是最优的。或者可以保留开发功能但使用功能开关有选择的关闭或打开开发功能。

关于BEHAVIAC_RELEASE可以参考优化及性能

发表评论

电子邮件地址不会被公开。 必填项已用*标注