news 2026/2/7 13:21:05

教程4:预制的使用-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
教程4:预制的使用-–-behaviac

原文

本文档描述的是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。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 14:37:51

LeetCode 449 - 序列化和反序列化二叉搜索树

文章目录摘要描述题解答案(核心思路)为什么普通二叉树和 BST 不一样?BST 的关键点本题采用的策略题解代码(Swift 可运行 Demo)题解代码分析1. 为什么用前序遍历?2. serialize 的核心逻辑3. deserialize 的核…

作者头像 李华
网站建设 2026/1/29 13:55:15

luogu填坑

我一开始的思路&#xff1a;从1开始遍历&#xff0c;比如样例中&#xff0c;4>0那么开始往她后面寻找不等于0的道路一起-1&#xff0c;计为一次cnt1#include<stdio.h> int main(){int n;int str[10008];scanf("%d",&n);for(int i0;i<n;i){scanf(&quo…

作者头像 李华
网站建设 2026/2/3 22:44:32

Kubernetes API Server 深度解析与生产实践全指南

Kubernetes API Server 深度解析与生产实践全指南 Kubernetes 的核心是 API Server(kube-apiserver),它是集群操作的唯一入口。无论是内部组件(如 kubelet、scheduler)还是外部用户(如 kubectl 命令),所有请求都必须通过 API Server。可以把它理解为 Kubernetes 的“大…

作者头像 李华