本文档描述的是3.6及以后版本,对于3.5及以前的老版本请参考分类“3.5”。
为了方便使用,behaviac组件除了提供传统的序列、选择等组合节点之外,还提供了随机与概率相关的节点类型,主要包括随机序列(SequenceStochastic)、随机选择(SelectorStochastic)和概率选择(SelectorProbability)等节点。
这3个节点对于初学者容易混淆,本文将结合行为树中对这3个节点的使用来分别加以说明。
1. 创建类型信息
首先创建Agent子类“FirstAgent”及其成员方法Say(behaviac::string& value),Say()方法用于打印指定的参数,如下图所示:
2. 随机序列节点
如果对随机序列节点不熟悉,请首先查看其手册《随机序列节点》。
1. 创建行为树“sequencestochasticBT”,其中随机序列节点有3个动作子节点,分别输出“A”、“B”、“C”,如下图所示:
2. 随机序列节点的的属性“随机数”默认为空,表示使用系统默认的随机数产生器,当然也可以配置自己实现的随机数方法,这里我们保持为空即可,如下图所示:
3. 执行该行为树,结果如下图所示:
可以看到随机输出了“B”、“C”、“A”,但多次执行程序,发现都是输出这个顺序,并没有随机输出。这是由于没有调用随机种子方法,需要在代码中调用如下接口即可:
#if BEHAVIAC_CCDEFINE_MSVC time_t timer; time(&timer); behaviac::RandomGenerator::GetInstance()->setSeed((unsigned int)timer); #endif
3. 随机选择节点
如果对随机选择节点不熟悉,请首先查看其手册《随机选择节点》。
1. 创建行为树“selectorstochasticBT”,其中随机选择节点有3个动作子节点,分别输出“A”、“B”、“C”,如下图所示:
2. 随机选择节点的的属性“随机数”默认为空,表示使用系统默认的随机数产生器,当然也可以配置自己实现的随机数方法,这里我们保持为空即可,如下图所示:
3. 执行该行为树,结果如下图所示:
可以看到随机输出了“C”,多次执行程序,可以看到还会随机输出“A”或“B”。
4. 概率选择节点
如果对概率选择节点不熟悉,请首先查看其手册《概率选择节点》。
1. 创建行为树“selectorprobabilityBT”,其中概率选择节点有3个动作子节点,权值分别为20、30、50,表示分别会已20%、30%、50%的概率输出“A”、“B”、“C”,如下图所示:
2. 概率选择节点节点的的属性“随机数”默认为空,表示使用系统默认的随机数产生器,当然也可以配置自己实现的随机数方法,这里我们保持为空即可,如下图所示:
3. 执行该行为树,结果如下图所示:
可以看到随机输出了“B”,多次执行程序,可以看到还会随机输出“A”或“C”。
本教程相关的工作区和代码工程详见源码包的目录tutorials/tutorial_13。