本文档描述的是3.6及以后版本,对于3.5及以前的老版本请参考分类“3.5”。

预制(Prefab)可以用来复用和实例化已有的行为树,如果只是直接复用行为树,预制跟引用子树的功能是一样的。

但是预制还可以用来定制个别节点的配置,称之为对预制的实例化。也即,如果一棵行为树用到了一棵预制行为树,那么可以局部修改某些节点,这些修改的节点不会跟着预制行为树的更新而同步更新。

首先新建一棵行为树“ParentBT”,如下图所示:

在ID为2的序列节点上右键鼠标,弹出菜单,选择“另存为预制行为树”,表示准备将该序列节点为根节点的子树保存为一棵预制行为树,如下图所示:

在弹出的“另存为预制”窗口中,可以为当前的预制改名,然后点击“确认”按钮,如下图所示:

在编辑器左侧的行为树列表中,可以看到多了“pf_Sequence”节点,这就是刚刚保存出来的预制行为树,如下图所示:

在“Prefabs”下面的所有预制行为树都可以直接拖拽到主视口中打开的行为树中使用,不过需要保证预制行为树跟主视口中打开的行为树的Agent类型保持兼容,也即要么类型相同,要么预制行为树的Agent类型是主视口中打开的行为树的Agent类型的基类。

双击打开预制行为树“pf_Sequence”,可以看到该树自动添加了根节点及其Agent类型“FirstAgent”,其他节点跟原有的情况保持一致,如下图所示:

而在行为树“ParentBT”中,可以看到原有的ID为2的序列节点所在的子树已被上面的预制行为树“pf_Sequence”所替代,如下图所示:

修改了预制行为树“pf_Sequence”中的节点,所有引用到该预制行为树的行为树都会保持相同的更新,除非在行为树中有对预制行为树的节点属性有自己的修改或定制。

再为行为树“ParentBT”拖拽添加一个预制“pf_Sequence”分支,如下图所示:

修改上图中的第二个预制“pf_Sequence”中ID为9的赋值节点右值为3,如下图所示:

可以看到上图ID为8和9的两个节点都变为了虚线框,表示这是预制实例化(定制)后的节点及其父节点。

如果在预制行为树“pf_Sequence”中,修改节点ID为5的赋值节点的右值为6,如下图所示:

那么行为树“ParentBT”中ID为5的赋值节点的右值会同步更新为6,但是ID为9的赋值节点的右值还是为3,并没有同步更新,因为该节点已经被定制过了,如下图所示:

执行最终的行为树,输出结果如下图所示:

本教程相关的工作区和代码工程详见源码包的目录tutorials/tutorial_4

发表评论

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