跳到主要内容

行为树

行为树简介

  1. 定义

    行为树(Behavior Tree)是一种用于控制虚拟角色或系统行为的决策结构。它由多个节点组成,每个节点代表一个行为或决策步骤。行为树通过层次化的方式将复杂行为拆分成简单、可管理的子行为。

    在FactVerse Designer中,行为树可以用于控制孪生体行为(例如设备的启动和停止)、孪生体的状态管理(如AGV小车从“待机”切换到“工作”状态)等。

执行规律

  1. 行为树的执行顺序为从上至下,从左到右。

  2. 当行为树运行到终结状态时,会回到根节点重新开始运行。

  3. 根节点只能有一个子节点。

  4. 当节点有子节点时,会优先执行它包含的子节点,当子节点按照从左至右的顺序运行完之后,再运行下一个节点。

  5. 行为树在不处于闲置状态或被删除时,是会一直按照顺序循环运行。

节点类型

根节点

创建行为树时会自动生成根节点,它是行为树执行的起始点。根节点不能被删除,而且只能连接一个子节点。

复合节点

复合节点用于控制子节点的执行顺序和逻辑判断,包括并行节点、选择节点和顺序节点。复合节点可以添加多个子节点,每个子节点可以是复合节点或动作节点。

A question mark in a blue square Description automatically generated

图 143 复合节点

  1. 并行节点:并行节点下所有节点将一起执行。并行成功标准可以选择:

    • 一个子节点成功则成功

    • 所有子节点成功则成功

  2. 选择节点:选择节点下方的子节点按照从左往右的顺序执行。只要遇到一个子节点返回成功,整个选择节点返回成功并且后面的子节点将不再执行;如果所有子节点都失败,则选择节点返回失败。

  3. 顺序节点:顺序节点下方的子节点按从左到右的顺序执行。

遍历策略

顺序节点支持以下两种遍历策略来决定执行流程的终止条件:

  • 遇到子节点执行失败则返回失败:子节点从左至右依次执行,一旦某个子节点执行失败,整个顺序节点立即返回失败,不再继续执行剩余的子节点。

  • 全部子节点执行失败则返回失败:所有子节点都会依次执行,只有当所有子节点都执行失败时,顺序节点才返回失败。如果任意子节点执行成功,则顺序节点返回成功。

循环类型

顺序节点支持以下几种循环类型,用于场景中需要重复执行子节点的情况:

  • 不循环:顺序节点下的子节点仅执行一遍,不重复执行。

  • 所有子孪生体:顺序节点会对每个子孪生体依次执行子节点的操作,即在每个孪生体上执行一轮完整的操作流程。

  • 容器属性:根据容器属性,顺序节点会对容器内的每个元素依次执行子节点。

  • 数字增量循环:根据预设的循环次数,顺序节点会在递增的数值下多次执行子节点,直到达到终止条件。

退出循环的方式

在循环执行过程中,顺序节点提供以下退出条件:

  • 循环结束退出:达到预设的循环次数后退出。

  • 遇到成功则退出:一旦某个子节点成功执行,立即停止循环并返回成功。

  • 遇到失败则退出:一旦某个子节点执行失败,立即停止循环并返回失败。

动作节点

动作节点表示孪生体具体的行为或任务,例如沿路径移动、等待等。动作节点是行为树中的叶子节点,可以实现复杂的逻辑。当执行动作节点时,它会执行特定的动作,并根据情况返回成功、运行中或失败三种返回值。

  • 成功:表示当前节点运行成功;

  • 运行中:表示当前节点还在运行中,下一次调用行为树时仍然运行当前节点;

  • 失败:表示当前节点运行失败。

节点的配置

节点基本操作

  1. **添加节点:**从节点菜单中拖拽到编辑区。

  2. **删除节点:**在编辑区中选中要删除的节点,点击工具栏中的删除按钮。

  3. **重命名节点:**在编辑区中选中要重命名的节点,在属性区上方节点名称处,输入节点的新名称。

  4. **连接节点:**要连接A 与B两个节点,从节点 A下方的横线处,拖拽出一条黄色的连接线,将其连接到节点B上方,松开鼠标完成连接。

    图 144 连接节点

  5. 删除节点连接线:按住鼠标右键,在要删除的连接线上划过就可以切断两个节点之间的连线。

  6. 整理节点:选中根节点,然后按下L键,便可以自动整理树的格式。

节点的常用设置

行为树中的节点条件和属性设置中经常会需要获取孪生体的属性、孪生体、孪生体的位置。

选择属性

属性的来源

  • 孪生体的属性:从孪生体模板中选择特定属性。

    • 孪生体的来源

      • 自身:选择当前正在执行行为树的孪生体。

      • 临时孪生体:选择在执行过程中临时创建或使用的孪生体。

      • 属性中的孪生体:通过属性中存储的唯一标识符来查找并选择特定的孪生体。

      • 场景中的所有孪生体:在整个场景中查找孪生体。

  • 树属性:从当前行为树的属性中获取属性值。

  • **当前属性:**当行为树遍历容器内的属性时,本次遍历的属性为当前属性。

选择值

值的来源

  • 手动输入

  • 孪生体中的属性

    • 孪生体的来源:选择孪生体

    • 目标属性

  • 树属性

    • 树属性:选择具体的行为树属性
  • 当前属性:当行为树遍历容器内的属性时,本次遍历的属性为当前属性。

选择孪生体

选择孪生体的基础方式

  • 自身:选择当前正在执行行为树的孪生体。

  • 临时孪生体:选择在执行过程中临时创建或使用的孪生体。

  • 属性中的孪生体:当用户选择此项时,系统将使用属性中存储的信息作为孪生体ID进行查找,返回与该标识符匹配的孪生体。

  • 场景中的所有孪生体:在整个场景中查找孪生体。

    进阶选择(孪生体过滤方式:当使用“场景中的所有孪生体”作为查找孪生体的基础方式时,可以通过不同的过滤方式来精确定位需要查找的孪生体

  • :不使用任何过滤条件,直接在场景中查找所有孪生体。

  • 指定孪生体

  • 选择孪生体

  • 选择属性中存储的孪生体

  • 按最小距离查找孪生体:根据孪生体与当前执行行为树的孪生体之间的距离进行筛选,找到最近的孪生体。

选择孪生体的进阶方式

  • :无特定进阶方式

  • 父孪生体:查找当前孪生体的父孪生体。例如,传送带上的货物的父孪生体是传送带。

  • 最后一个子孪生体:查找当前孪生体的最后一个子级孪生体。例如,一组生成的产品中的最后一个产品。

  • 第一个子孪生体:查找当前孪生体的第一个子级孪生体。例如,一组生成的产品中的第一个产品。

  • 所有子孪生体:查找当前孪生体的所有子级孪生体。例如,生产线上的所有产品。

  • 上一个孪生体:查找当前孪生体的前一个兄弟孪生体。例如,传送带上某个产品的前一个产品。

  • 下一个孪生体:查找当前孪生体的下一个兄弟孪生体。例如,传送带上某个产品的下一个产品。

    查找对象的类型:选择要查找的目标对象,目标对象可以是孪生体本身或孪生体中的特定角色。

  • 孪生体:选择查找整个孪生体对象,用于对孪生体进行整体操作或获取其属性。例如,查找并操作一台机器人、一个生产线设备或一个货架单元。

  • 孪生体中的角色:选择查找孪生体中的特定角色。这种类型用于对孪生体内部的具体部分进行操作,例如,一个原料生成器的孪生体模板中包含生成器模型、出口和进度条几个角色。

选择位置

获取位置的方式

  • 手动输入

  • 直接输入点的3维坐标值,格式x,y,z

  • 示例:输入 “10,20,30”表示具体的空间位置。

  • 孪生体的位置:使用孪生体的当前位置**。**

  • 孪生体的属性:从孪生体的属性中获取位置。

  • 树属性:从行为树的属性中获取位置。

  • 属性中的路径点:使用属性值在路径地图中寻找点位。

坐标类型

  • 局部坐标:相对于某个参考点的坐标。传送带上的货物的局部坐标是相对于传送带中心点的坐标。

  • 坐标:全局坐标,即世界坐标。

孪生体节点

孪生体节点用于创建、删除和操作孪生体及其属性。

图 145 孪生体节点

创建孪生体

功能:以指定姿态(位置、旋转角度)创建指定孪生体模板对应的孪生体。

图 146 创建孪生体节点属性

参数说明

  • 使用的模板

    选择用于创建孪生体的模板。

  • 位置

    设置新孪生体在场景中的创建位置。

  • 旋转

    设置新孪生体的旋转角度。

示例配置

以下示例展示了如何配置“创建孪生体”节点,使得孪生体A在自己的出口处创建新的孪生体:

图 147 创建孪生体配置示例

  1. 使用的模板
  • 值的来源:选择“孪生体中的属性”

  • 孪生体的来源:选择“自身”

  • 目标属性:选择“孪生体A的模板”/>“产生孪生体的标识符”(这是用户在孪生体A的模板中自定义的模板标识符属性)

    1. 位置
  • 值的来源:选择“孪生体中的属性

  • 孪生体的来源:选择“自身”

  • 孪生体的属性:选择“孪生体A的模板”/> “出口” /> “出入口的位置”

    1. 旋转
  • 手动输入:设置旋转角度为 (0,0,0)

删除孪生体

功能:删除指定孪生体。例如,当生产线上的产品已经过期或不再需要时,自动删除这些产品。

图 148 删除孪生体节点属性

参数说明

  • 目标孪生体:指定要删除的孪生体对象。

  • 孪生体的来源

    • 自身:删除当前执行行为树的孪生体。

    • 临时孪生体:删除在特定条件下自动生成的临时孪生体。

    • 属性中的孪生体:通过属性中的标识符查找并删除特定孪生体。

    • 场景中的所有孪生体:遍历场景中所有孪生体并删除符合条件的对象。

示例配置

在工厂生产线使用销毁器时,可以通过配置"删除孪生体"节点来实现自动移除不需要的产品。以下是具体配置:

图 149 销毁器的删除孪生体节点配置

目标孪生体:选择“临时孪生体”,处理在运行过程中自动生成并需要删除的临时产品或部件。

设置属性

功能:设置孪生体或行为树的任意属性。您可以通过设置属性节点来更新产品状态、调整生产设备参数,或控制流程中的特定行为。

图 150 设置属性节点属性

参数说明

  • 目标属性

    指定要设置的属性,可以是孪生体或行为树中的任意属性。

  • 属性的来源

    • 孪生体中的属性:从特定孪生体中选择属性。

    • 树属性:从当前行为树的属性中获取值。

    • 当前属性:当行为树遍历容器内的属性时,本次遍历的属性为当前属性。

  • 数值的设置策略

    • 替换原始值:直接用新值替换现有属性值。

    • 与原数值求和:将新值与当前属性值相加。

  • 设置的值可通过以下方式指定:

  • 手动输入:直接输入数值。

  • 孪生体中的属性:从指定孪生体的属性中获取值。

  • 树属性:从行为树的属性中获取值。

  • 当前属性:当行为树遍历容器内的属性时,本次遍历的属性为当前属性。

设置孪生体姿态

功能:设置孪生体或孪生体内角色的位置和旋转。例如,调整机器人手臂的位置和角度以执行特定任务。

图 151 设置孪生体姿态节点属性

参数说明

  • 目标

    指定要调整姿态的对象,可以是孪生体本身或孪生体中的特定角色。

  • 孪生体:选择要调整的孪生体。

  • 孪生体中的角色:选择孪生体内部的具体角色进行姿态调整。

  • 位置

    设置孪生体或角色在场景中的坐标位置。

  • 旋转

    设置孪生体或角色的旋转角度。

设置孪生体父物体

功能:将一个孪生体或其中的角色设置为另一个孪生体或其角色的子物体。例如,在生产设备的装配中,某个组件可以设置为机器主体的子物体。

A screenshot of a phone Description automatically generated

图 152 设置孪生体父物体节点属性

参数说明

  • 目标

    指定要设置层级关系的对象,可以是一个孪生体或孪生体中的某个角色。

  • 孪生体:选择孪生体作为目标对象。

  • 孪生体中的角色:选择孪生体中的特定角色作为目标对象。

  • 无父级对象:移除目标对象的父级关系,使其不再从属于任何父物体。

  • 新的父级对象

    选择新的父级对象,允许将目标对象附加到另一个孪生体或其角色上,形成新的父子关系。

  • 孪生体:选择新的孪生体作为父级对象。

  • 孪生体中的角色:选择孪生体中的特定角色作为新的父级对象。

  • 修改前后保持坐标不变:勾选此选项后,目标对象的坐标将保持不变,即使其父级关系发生变化。

获取孪生体

功能:将指定的孪生体设置为当前孪生体,或将孪生体的标识符保存到指定属性中,方便后续流程中的调用和操作。

A screenshot of a chat Description automatically generated

图 153 获取孪生体

参数说明

  • 目标

    指定需要获取的孪生体来源。

  • 自身:当前正在执行行为树的孪生体。

  • 临时孪生体:执行过程中动态创建的孪生体。

  • 属性中的孪生体:从属性中获取孪生体标识符并找到对应的孪生体。

  • 场景中的所有孪生体:在整个场景中查找符合条件的孪生体。

  • 孪生体设置选项

    选择如何处理获取到的孪生体。

  • 设置孪生体到当前孪生体:将获取到的孪生体设置为当前孪生体。

  • 设置孪生体到属性:将获取到的孪生体标识符保存到目标属性中,便于后续操作使用。

显示隐藏孪生体

功能:通过该节点控制孪生体或孪生体中的角色在场景中的显示或隐藏状态。例如,可以在特定的操作步骤中隐藏或显示某些孪生体,帮助学员更好地聚焦当前任务。

图 154 显示隐藏孪生体节点属性

参数说明

  • 目标

    选择要显示或隐藏的对象,可以是完整的孪生体或其中的某个角色。

  • 孪生体:选择整个孪生体为目标,进行显示或隐藏操作。

  • 孪生体中的角色:选择孪生体内的特定角色进行显示或隐藏操作。

  • 显示:控制目标对象的显示状态。

    • 启用:将目标对象设置为可见。

    • 禁用:将目标对象设置为不可见。

属性转 Vector3

功能:将三个不同的数值(如位置或旋转的X、Y、Z轴值)组合成一个三维向量(Vector3)形式。

图 155 属性转 Vector3 节点属性

参数说明

  • 属性1

    用于三维向量的第一个分量(通常是X轴)。

  • 属性2

    定义向量的第二个维度(Y轴)。

  • 属性3

    定义向量的第三个维度(Z轴)。

Vector3转属性

功能:将一个三维向量(Vector3)拆分为三个独立数值,分别对应 X、Y、Z 轴 的值。常用于将位置或旋转向量转换为单独的轴向数值,便于进一步运算或逻辑处理。

A screenshot of a phone AI-generated content may be incorrect.

图 156 Vector3转属性节点

参数说明

  • 获取Vector3属性:指定要转换的 Vector3 属性(可手动输入或从已有属性选择)。

  • 是否需要存出X值:勾选后,将Vector3 的 X 分量存到一个属性里。

  • 是否需要存出Y值:勾选后,将Vector3 的 Y 分量存到一个属性里。

  • 是否需要存出Z值:勾选后,将Vector3 的 Z 分量存到一个属性里。

删除容器元素

功能:该节点用于从指定的容器属性中移除元素。支持的容器类型包括:

  • 列表(List):按顺序存储多个元素,可通过索引访问;

  • 字典(Dictionary):通过键值对存储元素,适用于以标识符访问对象的场景。

    图 157 删除容器元素

参数说明

参数说明
目标容器指定需要移除元素的目标容器属性。该容器可以是列表或字典。
清空容器内容勾选该选项时,将清空容器中的全部元素。适用于需要重置容器状态的场景,例如“初始化设备列表”或“清空缓存”操作。
值(删除的元素)若未勾选“清空容器”,则需填写此参数,表示要移除的目标元素: • 对于列表:输入目标元素的索引; • 对于字典:输入要删除的键。

设置列表元素下标

功能:用于调整列表中某个元素的位置。通过设置元素的 当前下标目标下标,可以将该元素移动到指定位置,从而改变列表顺序。

A screenshot of a phone AI-generated content may be incorrect.

图 158 设置列表元素下标

参数说明

  • 目标属性:指定需要调整的 列表属性。列表下标从 0 开始计数。

    例如:列表 /[A, B, C/] 中,A 的下标为 0,B 的下标为 1。

  • 当前下标:目标元素目前所在的位置(下标)。

  • 目标下标:希望将目标元素移动到的新位置(下标)。

设置Vector3单轴数值

功能:用于修改某个 Vector3 属性中的单一轴向(X / Y / Z)的数值,而不影响该向量的其他分量。常用于位置、旋转或缩放等三维向量的局部调整。

A screenshot of a phone AI-generated content may be incorrect.

图 159 设置Vector3单轴数值

参数说明

  • 目标属性:选择需要修改的 Vector3 属性(如位置、旋转等)。

  • 目标轴向:指定需要修改的轴向分量,可选择 X、Y 或 Z。

  • 目标值:输入该轴向需要更新到的数值。

路径节点

路径节点用于设置和控制孪生体的移动路径。

图 160 路径节点

设置孪生体移动路径

功能:将指定路径保存到孪生体或孪生体中角色中。通过配置路径、速度和移动起点,在需要时能够按照设定的路径进行移动,例如用于传送带上货物沿传送带移动。

图 161 设置孪生体移动路径节点属性

参数说明

  • 要移动的目标

    选择需要沿路径移动的目标,可以是整个孪生体或孪生体中的某个特定角色。

  • 孪生体:选择孪生体作为移动对象。

  • 孪生体中的角色:选择孪生体中的角色作为移动对象。

  • 目标路径

    指定目标孪生体或角色移动的路径。路径可以通过手动输入或从已有属性中获取。

  • 反向移动:勾选此选项时,孪生体将沿指定路径的反方向进行移动。

  • 移动的起点

    设置孪生体移动的初始位置。

  • 目标速度

    设定孪生体移动时的速度。速度可以通过手动输入或从属性中获取。

  • 进入路径时保持原始旋转角度

    勾选此选项后,孪生体在进入路径时将保持其原有的旋转角度,不会根据路径的方向自动调整。

    示例:以下示例演示如何使用“设置孪生体移动路径”节点为传送带上的物品设置移动路径。

    图 162 设置传送带上货物的移动路径

沿路径移动孪生体

功能:该节点用于沿指定路径移动孪生体或孪生体中的角色。

典型应用场景:

  • 为 AGV(自动导引运输车)设置路径与速度;

  • 控制吊车搬运的移动过程。

    图 163 沿路径移动孪生体

参数说明

  1. 移动目标与路径

    参数说明选项
    要移动的目标指定需要沿路径移动的对象孪生体:移动整个孪生体
    孪生体中的角色:仅移动其中角色
    使用当前路径使用孪生体预设属性中的 “当前移动路径” 作为运行路径——
    反向移动勾选后,孪生体将沿路径反方向移动——
  2. 起点配置

    参数说明选项
    移动的起点指定孪生体从哪里进入路径当前位置:从当前位置进入路径,并向路径上最近点移动
    路径上距离孪生体最近的位置:瞬移到路径上最近点,从该点开始移动
    路径的起点:瞬移到路径起点,从路径起点开始移动
  3. 路径点管理

    参数说明
    移除移动过的点勾选后,孪生体经过的路径点会被移除
  4. 旋转控制

    参数说明选项/补充
    移动过程中需要旋转控制孪生体在移动时是否自动调整方向(默认勾选)。开启后,旋转方式将按照 “沿路径移动时的旋转方式” 的设定执行。——
    沿路径移动时的旋转方式指定孪生体如何调整旋转使用前进方向:始终与路径方向一致
    使用路径点旋转信息:在到达路径点时,应用【生成路径】节点中设置新加点的旋转角度/角速度;若未设置,则不旋转
    进入路径时保持原始旋转角度勾选后,进入路径时保持原始角度;后续仍会根据旋转设置调整(默认勾选)——
  5. 速度控制

    参数说明选项/补充
    设置速度的方式决定移动速度的来源使用孪生体速度:使用孪生体预设属性中的速度,匀速移动
    使用路径点速度:在路径点处使用【生成路径】节点中配置的速度;若未设置,则回退到孪生体速度
    设置目标移动速度配置加速→匀速段的速度。未设置时,默认使用孪生体元数据中的速度属性加速转为匀速的位置:加速段所占路径比例(0–1)
    目标速度:设定匀速速度值
    设置末尾速度配置匀速→减速段的速度。未设置时,默认使用孪生体元数据中的速度属性- 匀速变为减速的位置:匀速段占全路径比例(0–1)
    - 末尾速度:临近终点时的目标速度
  6. 平滑性

    参数说明
    转弯的圆角半径控制路径拐弯时的圆角半径(米),越大越平滑

移动一步

功能:使目标孪生体以配置速度移动一步。例如,在自动化生产线上,使传送带上的物体移动一步,模拟物体在传送带上逐步移动的过程。

A screenshot of a phone AI-generated content may be incorrect.

图 164 移动一步节点属性

参数说明

  • 要移动的目标:选择需要移动的目标,可以是整个孪生体或孪生体中的特定角色。

    • 孪生体:选择孪生体作为移动对象。

    • 孪生体中的角色:选择孪生体中的角色作为移动对象。

  • 目标速度:设定移动的目标速度。

  • 移动过程中需要旋转:勾选此选项时,移动过程中目标将沿着移动方向进行旋转。默认勾选。

  • 转弯的圆角半径:设置目标对象在转弯处的圆角半径,数值越大表示转弯越平滑。

生成路径

功能:用于在场景中生成一条路径,可选择通过坐标或路径点来定义起点、终点或新增路径点。您可以创建一条全新路径,也可以在已有路径的基础上继续扩展。

A screenshot of a phone AI-generated content may be incorrect.

图 165 生成路径节点属性

参数说明

  • 点的输入方式:决定后续 起点 / 终点 / 新加点 的配置方式。

    • 使用点坐标:需输入具体坐标(Vector3),如 (1, 2, 3)。

    • 使用路径点:需输入路径点名称,如 point0

  • 生成新路径或添加到现有路径

    • 生成新路径:根据输入的起点和终点生成一条新的路径。

    • 添加到路径:在已有路径的末尾增加一段新路径。

  • 路径生成方式

    • 基于已有路径生成:在已有路径点所在路径上寻找最短路径。

    • 坐标直连生成:根据目标路径点的坐标,生成一条直连路径。支持设置旋转与速度

  • 起点:指定路径的起点。

  • 终点:指定路径的终点。

  • 将路径保存到目标属性:选择一个属性用于存储新生成的路径,便于后续调用或复用。

追踪路径规划

功能:设置孪生体的追击目标、最短路径、起始点,自动寻路追击目标孪生体。例如,机械臂在传送带上抓取一个移动的货物。

A screenshot of a phone Description automatically generated

图 166 追踪路径规划节点属性

参数说明

  • 将路径保存到目标属性:指定路径规划后的路径保存的位置。

  • 起点:设置路径追踪的起始点。

  • 追踪目标

    • 孪生体:选择目标孪生体作为追踪对象。

    • 孪生体中的角色:选择孪生体中的特定角色作为追踪对象。

自主寻路移动

功能:该节点用于实现自主寻路功能,在指定寻路面上,根据设定的终点位置,自动计算最优移动路径并驱动目标对象前往该终点。适用于如 AMR等设备的动态寻路调度场景。

A screenshot of a phone AI-generated content may be incorrect.

图 167 自主寻路移动节点属性

参数说明

  1. 移动目标设置

    参数说明选项
    要移动的目标指定需要进行自主寻路移动的对象孪生体:移动整个孪生体
    孪生体中的角色:移动孪生体内指定角色
    目标速度指定移动速度,单位为米/秒。若不设置,将使用孪生体预设属性中的速度如 1.5、2.0
  2. 寻路终点配置

    参数说明
    终点指定寻路目标位置,支持多种方式:
    - 手动输入坐标
    - 选择出入口
    - 引用其他孪生体的位置属性等
  3. 节点执行控制

    参数说明
    到达后退出节点控制节点在接近终点时是否退出:
    - 勾选:当距离终点小于“终止范围”时,节点结束,执行后续节点
    - 不勾选:始终保持运行状态,如目标变动则持续寻路(可用于追踪)
    终止范围设置距离终点小于多少米时,视为“到达终点”并结束寻路。
    单位:米;仅支持非负数字,支持小数;不支持输入字符或负数

出入口节点

A screenshot of a computer Description automatically generated

图 168 出入口节点

入口获取孪生体

功能:从指定的出入口获取孪生体,并将其设置为当前孪生体或保存到目标属性中。

A screenshot of a computer Description automatically generated

图 169 入口获取孪生体节点属性

参数说明

  • 目标出入口:选择要从中获取孪生体的出入口。

  • 孪生体设置选项

    • 设置孪生体到当前孪生体:将获取的孪生体设置为当前操作中的孪生体。

    • 设置孪生体到属性:将获取的孪生体保存到指定的属性中。

  • 移除出入口孪生体:勾选此选项时,将孪生体从指定的出入口中移除。

入口移除孪生体

功能:删除出入口处的孪生体。

A screenshot of a chat Description automatically generated

图 170 入口移除孪生体节点属性

参数说明

  • 目标出入口:选择要从中移除孪生体的出入口。

放置孪生体到出入口

功能:将指定的孪生体放置到选定的出入口位置。

图 171 放置孪生体到出入口节点属性

参数说明

  • 目标出入口:选择孪生体要放置的出入口。

  • 目标孪生体:指定需要放置到出入口的孪生体。

存储区节点

A black and white logo Description automatically generated

图 172 存储区节点

出货整理

功能:将孪生体从指定的存储区中移除,模拟货物出库或物体从存储区域转移的过程。

A screenshot of a computer Description automatically generated

图 173 出货整理节点属性

参数说明

  • 目标存储区:选择需要移出孪生体的存储区。

入货整理

功能:将指定孪生体放入指定存储区。

A screenshot of a computer Description automatically generated

图 174 入货整理节点属性

参数说明

  • 目标存储区:选择需要存入孪生体的存储区。

  • 要存入的孪生体:指定要放入存储区的孪生体。

角色节点

图 175 角色节点

播放动画

功能:播放指定孪生体或孪生体中的角色的指定动画,默认播放一次。

图 176 播放动画节点属性

参数说明

  • 目标:选择动画播放的目标对象。

    • 孪生体:选择整个孪生体为动画播放对象。

    • 孪生体中的角色:选择孪生体中某个特定角色为动画播放对象。

  • 动画控制:设置动画的控制方式。

    • 动画状态

      • 播放:开始播放动画。

      • 暂停:暂停当前动画。

      • 继续播放:继续播放已暂停的动画。

      • 从头播放:从动画的起点重新播放。

    • 播放模式

      • 默认:从动画剪辑中读取循环模式(默认是播放一次)

      • 播放一次:当时间到达动画剪辑末尾时停止动画的播放。

      • 循环播放:当播放到末尾的时候重新从开始播放。

      • 循环往复播放:当时间到达动画剪辑的结尾,时间将在开始和结束之间,像乒乓一样来回播放。

      • 播放到最后一帧继续播放:回放动画。当达到结尾,它会继续播放最后一帧,永不停止播放。

  • 动画名称:需要手动填写动画名称,孪生体或角色必须包含此动画。可以通过DataMesh Importer查看模型的动画名称。

  • 动画速度:设定动画播放的速度,默认为1倍速。

    示例:以下示例演示如何使用“播放动画”节点为“六轴机械臂”播放“拾取并移动物品位置”的动画。

    图 177 动画节点配置示例

  • 目标:孪生体中的角色:六轴机械臂

  • 动画控制

  • 动画状态:播放

  • 播放模式:默认

  • 动画名称:“拾取并移动物品位置”

  • 动画速度:1(1倍速)

工具节点

图 178 工具节点

闲置

功能:停止行为树的运行。

示例

以下闲置节点使用“目标出入口上是否存在孪生体”的条件进行判断,当孪生体出口处存在其他孪生体时停止运行行为树。

图 179 闲置节点条件示例

产生记录

功能产生记录节点用于输出指定的文本内容,输出的内容显示在场景播放界面中的“场景输出信息记录”面板中。

A screenshot of a computer Description automatically generated

图 180 产生记录节点属性

参数说明

  • 要打印的内容:手动输入需要输出的文本内容。

等待

功能:等待节点用于暂停行为树的执行,直到设定的等待时间结束为止。一旦等待时间结束,行为树将继续执行等待节点后续的节点。

图 181 等待节点属性

参数说明

  • 等待时长:设置行为树暂停的时间长度。

    • 手动输入:手动设定具体的等待时间(秒)。

    • 孪生体中的属性:使用孪生体属性值作为等待时间值。

    • 树属性:使用行为树中的属性来定义等待时间。

    • 当前属性:当行为树遍历容器内的属性时,本次遍历的属性为当前属性。

  • 保存等待时长到属性:勾选此选项将等待的时间保存到指定的目标属性中,便于后续使用或记录。

    • 目标属性:选择保存等待时长的属性。

行为树节点

图 182 行为树节点

添加行为树

功能:将指定的行为树添加到目标孪生体上。

图 183 添加行为树节点属性

参数说明

  • 目标孪生体:选择需要添加行为树的孪生体。

  • 目标行为树:选择要添加到孪生体上的行为树。

移除行为树

功能:从目标孪生体上移除目标行为树。

A screenshot of a chat Description automatically generated

图 184 移除行为树节点属性

参数说明

  • 目标孪生体:选择需要移除行为树的孪生体。

  • 目标行为树:选择要移除的行为树。

数学节点

数学节点用于进行各种数学运算,并将结果应用到孪生体属性中。

图 185 数学节点

Sin函数

功能:将输入值转换为对应的正弦值并输出。

Cos函数

功能:将输入值转换为对应的余弦值并输出。

Tan函数

功能:将输入值转换为对应的正切值并输出。

正态函数

功能:使用输入值生成正态分布的输出数值。

泊松函数

功能:使用输入值生成泊松分布的输出数值。

随机数

功能:输出一个随机数。

加法运算

功能:选择孪生体的两个属性值进行加法运算,将计算结果替换孪生体某个指定属性值或与其相加。

减法运算

功能:选择孪生体的两个属性值进行减法运算,将计算结果替换孪生体某个指定属性值或与其相加。

乘法运算

功能:选择孪生体的两个属性值进行乘法运算,将计算结果替换孪生体某个指定属性值或与其相加。

除法运算

功能:选择孪生体的两个属性值进行除法运算,将计算结果替换孪生体某个指定属性值或与其相加。

事件节点

A close-up of a logo Description automatically generated

图 186 事件节点

接收事件

功能:用于监听并响应指定事件。只有一个孪生体可以监听并响应此事件,例如,如果有两个AGV需要争抢同一个货物时,可以使用接收事件节点确保只有一个AGV响应货物到达的事件,从而避免冲突。

A screenshot of a chat Description automatically generated

图 187 接收事件节点属性

参数说明

  • 事件标识符:指定要监听的事件标识符。

  • 将接收的孪生体保存到目标属性:开启此选项后,将监听到的事件标识符保存到目标属性,供后续操作或逻辑判断使用。

发送事件

功能:发送指定事件以触发其他孪生体的行为或动作。例如,在生产线上,当一个加工步骤完成后,可以发送一个事件通知下一个加工步骤的孪生体开始工作。

A screenshot of a chat Description automatically generated

图 188 发送事件节点属性

参数说明

  • 事件标识符:指定要发送的事件标识符,用于通知其他孪生体执行相关动作。

  • 设置事件中发送的孪生体:将孪生体随事件一起发送,供其他孪生体在接收事件时使用。

节点的条件

定义

节点的条件可以应用于复合节点和动作节点,用来判断是否执行该节点。只有在条件满足时,节点才会被执行;如果不满足条件,节点将不会执行,并返回结果给父节点。

图 189 条件设置

  • 条件组内的条件为“与”的关系:在一个条件组中,所有条件都必须全部满足,节点才会被执行。

  • 多个条件组之间为“或”的关系:如果一个节点设置了多个条件组,只要任意一个条件组满足,节点就可以执行。

常见条件

目标出入口上是否存在孪生体

此条件用于判断孪生体的出口或入口处是否存在其他孪生体。

图 190 目标出入口上是否存在孪生体

参数说明

  • 目标:设置需要检查的出入口。

示例

下面的示例判断当前执行行为树的孪生体的入口处是否存在其他孪生体。

A screenshot of a chat Description automatically generated

图 191 出入口是否存在孪生体

比较两个孪生体的属性值

此条件用于比较两个特定属性值,以确定是否满足特定条件。根据比较结果进行相应的行为逻辑处理。

图 192 比较两个孪生体的属性值

参数说明

  • 目标属性1:用于比较的第一个孪生体属性值。

  • 目标属性2:用于比较的第二个孪生体属性值。

  • 比较策略:定义如何比较两个属性值。

    • 等于:目标属性1的值等于目标属性2的值。

    • 大于:目标属性1的值大于目标属性2的值。

    • 小于:目标属性1的值小于目标属性2的值。

    • 小于等于:目标属性1的值小于目标属性2的值。

    • 大于等于:目标属性1的值大于等于目标属性2的值。

    • 不等于:目标属性1的值不等于目标属性2的值。

比较距离

该条件用于比较两个点之间的距离和参考值,根据比较结果进行相应的行为逻辑处理。

图 193 比较距离

参数说明

  • 点1

    • 获取位置的方式:选择如何获取第一个点的位置。有关位置选择的更多信息,请参阅选择位置

    • 坐标类型:选择使用的坐标类型,局部坐标或坐标。

  • 点2

    • 获取位置的方式:选择如何获取第二个点的位置。

    • 坐标类型:选择使用的坐标类型,局部坐标或坐标。

  • 目标值:用于比较的参考距离值。

  • 比较策略:选择比较方式,用于判断两个点之间的距离与目标值的关系。

    • 等于: 两个点的距离等于目标值。

    • 小于:两个点的距离小于目标值。

    • 大于:两个点的距离大于目标值。

    • 小于等于:两个点的距离小于等于目标值。

    • 大于等于:两个点的距离大于等于目标值。

    • 不等于:两个点的距离不等于目标值。

示例

假设要判断传送带出口是否发生阻塞,当第一个物体距离出口的距离小于预设的安全距离时,可以判断条件满足阻塞。设置方法如下:

图 194 出口处发生物体阻塞

  1. 点1

    • 获取位置的方式:选择“孪生体中的属性”。

    • 坐标类型:选择“局部坐标”。

    • 孪生体中的属性:选择“孪生体中的属性”/> “出入口的位置”

  2. 点2

    • 获取位置的方式:选择“孪生体的位置”。

    • 坐标类型:选择“局部坐标”。

    • 查找孪生体的方式:选择“自身”/> “第一个子孪生体”。

  3. 目标值

    • 值的来源:“孪生体中的属性”

    • 孪生体的来源:选择“自身”。

    • 目标属性: 选择“物品安全距离”。

  4. 比较策略:选择“小于”。

存储区中是否有孪生体

此条件用于判断指定的存储区中是否存在物体。

A screenshot of a phone Description automatically generated

图 195 存储区中是否有孪生体

参数说明

  • 目标存储区:设置需要检查的存储区。

    • 孪生体的来源:指定存储区所属的孪生体。

孪生体能否放入存储区

判断某个孪生体是否可以放入指定的存储区。

A screenshot of a phone Description automatically generated

图 196 孪生体能否放入存储区

参数说明

  • 目标存储区:指定目标存储区。

    • 孪生体的来源:用于指定存储区所属的孪生体。
  • 目标孪生体:指定要存放的孪生体。

    • 孪生体的来源:用于指定要放入存储区的孪生体。

示例

假设需要判断某个货物是否可以放入当前执行行为树的A孪生体的存储区,可以按照以下步骤进行设置:

  1. 目标存储区:选择“自身”。

  2. 目标孪生体:选择“临时孪生体”。

比较孪生体

此条件用于判断两个孪生体是否相同。

A screenshot of a phone Description automatically generated

图 197 比较孪生体

参数说明

  • 目标孪生体:选择要比较的孪生体。

  • 目标孪生体ID:选择用于对比的另一个孪生体的ID。

判断属性是否为空

此条件用于判断指定属性值是否为空,适用于控制流程执行、异常检测等场景。

支持判断以下类型的属性是否为空:

  • String(字符串):空字符串 "" 被视为空;

  • Object(对象):为 null 或未赋值时视为空;

  • List(列表):元素数量为 0 时视为空;

  • Dictionary(字典):键值对数量为 0 时视为空。

    若目标属性类型不是上述四类(如数值、布尔等),判断将直接返回失败。

    图 198 判断属性值是否为空

参数说明

  • 目标属性:要判断是否为空的目标属性。支持 String、Object、List、Dictionary 类型。

  • 取反:控制判断逻辑是否取反:

    • 勾选:属性 不为空 时条件成立;

    • 不勾选:属性 为空 时条件成立。

编辑行为树

基本流程

编辑行为树的基本流程可以分为以下几个步骤:

  1. 功能拆分

    将复杂的功能拆分为多个独立的子功能。例如,对于一个原料生成器,可以将功能拆分为“生产”和“输出”两个子功能。

  2. 准备孪生体模板

    1. 创建孪生体模板

    2. 添加资源:根据功能拆分的结果,为每个子功能实现的具体目标添加资源。例如,原料生成器的生产功能需要添加一个出口,以便将生成的物品输出。

    3. 属性设置:为每个子功能设置相关的属性。例如,对于原料生成器的生产功能,需要设置生产间隔和生产物品所需使用的模板这两个属性。

  3. **编辑行为树:**使用行为树编辑器,为每个子功能定义具体的行为逻辑。例如,原料生成器的生产功能可以设置为以一定时间间隔(等待节点)进行生产(创建孪生体节点)。输出功能可以使用设置孪生体出入口的节点发送货物至出口。

示例

原料生成器的基本功能

  1. 功能拆分:“生产”和“输出”。

  2. 准备孪生体模板:

    1. 创建孪生体模板:创建一个孪生体模板,并在模板中添加一个原料生成器模型(“/Public Directory/FactVerseDLC/ChuangJianQi_DLC”)。

    2. 添加资源:为原料生成器的生产功能添加一个“出口”。

      图表 描述已自动生成

      图 199 添加出口

  3. 属性设置:

    1. 孪生体模板窗格中,点击元数据旁的︙,选择添加结构“Part_1”。

    2. 设置生产间隔属性:在“Part_1”下添加一个“产生孪生体间隔时间”(Double 类型)属性,并作如下设置:

  • 单位:“秒”;

  • 默认值:“3”;

  • 勾选“是否在孪生体中显示”选项。勾选此项后,用户在场景编辑器中使用此模板生成孪生体时,可以编辑此项属性。

    图形用户界面 低可信度描述已自动生成

    图 200 设置“产生孪生体间隔时间”的属性

  1. 设置生产物品所需使用的模板的ID属性:在“Part_1”下添加一个“产生孪生体的标识符”(String类型)属性,并作如下设置:
  • 用途:选择“孪生体模板”;

  • 勾选“是否在孪生体中显示”选项。

    图片包含 图形用户界面 描述已自动生成

    图 201 产生孪生体的标识符

  1. 保存模板:点击工具栏中的【保存】按钮 进行模板的保存。

  2. 行为树编辑:

    1. 创建行为树

      1. 孪生体模板窗格中,点击行为树栏旁的︙,选择新建行为树选项。

        图片包含 图形用户界面 描述已自动生成

        图 202 新建行为树

  3. 在打开的窗口中,选择存储路径,并填写行为树名称。

    A screenshot of a computer AI-generated content may be incorrect.

    图 203 新建原料生成器行为树

  4. 点击【确认】按钮完成行为树的新建。

  5. 点击工具栏中的【保存】按钮 进行模板的保存。

  6. 编辑行为树:新建的行为树“原料生成器行为树”只包含一个根节点,下面的步骤将为“原料生成器行为树”添加节点和节点的运行条件。

    1. 孪生体模板窗格中,双击行为树栏下新建的“原料生成器行为树”,打开行为树编辑器。

    2. 为“原料生成器行为树”添加一个选择节点,连接根节点选择节点。关于连接方式请参考节点基本操作

      A screenshot of a computer Description automatically generated

      图 204 添加选择节点

  7. 添加闲置节点,连接选择节点闲置节点。设置闲置节点的运行条件,使其当出口存在生产的物品时停止。

    A screenshot of a computer Description automatically generated

    图 205 添加闲置节点

  8. 添加顺序节点,连接选择节点顺序节点

    A screenshot of a computer Description automatically generated

    图 206 添加顺序节点

  9. 添加等待节点,连接等待节点与顺序节点。设置等待节点的属性:

  • 等待时长:“孪生体的属性” /> “产生孪生体间隔时间”

    图 207 添加等待节点

  1. 为生成器添加生产物品的节点:添加一个创建孪生体节点,连接顺序节点创建孪生体节点,设置创建孪生体节点的属性:
  • 使用的模板:选择“孪生体中的属性”/>“产生孪生体的标识符”

  • 位置

    • **值的来源:**选择“孪生体中的属性”

    • 孪生体的来源:选择“自身”

    • 目标属性:“出入口的位置”

      图 208 添加创建孪生体节点

  1. 添加放置孪生体到出入口的节点,连接顺序节点与放置孪生体到出入口节点,设置节点的属性:
  • 目标出入口

    • **孪生体的来源:**选择“自身”

    • 选择出入口:选择“原料生成器”模板的“出口_1”

  • 目标孪生体:选择“临时孪生体”

    A screenshot of a computer Description automatically generated

    图 209 添加放置孪生体到出入口节点

  1. 点击工具栏中的【保存】按钮 保存行为树。

会移动的小球

  1. 创建一个球体孪生体模板:

    1. 点击主页中的【新建模板】,打开模板编辑器。

    2. 在场景区中放置一个“球体”,并调整其合适位置。

    3. 将小球的颜色改为绿色。

      图形用户界面 描述已自动生成

      图 210 改变球体颜色

  2. 点击工具栏中的保存按钮 ,保存模板名称为“移动的小球”。

  3. 为“移动的小球”模板添加主功能结构:

    1. 孪生体模板窗格中,点击元数据旁的︙,选择添加结构

    2. 下拉滚动条找到新添加的结构 “Part_1”,点击“Part_1”,在属性区修改结构名称为“主功能”。

    3. 在“主功能”结构下添加 “实时位置”(Vector3)属性。

      图表, 气泡图 描述已自动生成

      图 211 添加实时位置属性

  4. 为“移动的小球”模板添加驱动小球移动的行为树:

    1. 孪生体模板窗格中,点击行为树栏旁的︙,选择新建行为树选项。

    2. 保存行为树并命名为“移动小球”。

      图表, 气泡图 描述已自动生成

      图 212 添加“移动小球”的行为树

  5. 编辑行为树逻辑

    1. 双击“移动小球”行为树,打开行为树编辑器。

    2. 根节点下添加一个顺序节点

    3. 顺序节点下添加一个设置孪生体姿态节点“设置孪生体姿态1”,并为该节点做如下属性设置:

  • 目标

    • 值的来源:孪生体

    • 孪生体的来源:自身

  • 位置

    • 值的来源:手动输入

    • :0.5,0,0

    1. 在顺序节点下添加一个等待节点“等待1”,并设置等待时长手动输入值为“0.5”。

      A screenshot of a computer Description automatically generated

      图 213 设置等待时间的手动输入值

  1. 添加一个设置孪生体姿态节点:

    1. CTRL+C复制 “设置孪生体姿态1”节点,CTRL+V即在顺序节点下添加一个新的设置孪生体姿态节点“copy_设置孪生体姿态1”。

    2. 重命名为“设置孪生体姿态2”。

    3. 位置手动输入设置为“0.5,0,-0.5”。

      A diagram of a company Description automatically generated

      图 214设置孪生体的位置的手动输入值

  2. CTRL+C复制 “等待1”节点,CTRL+V即在顺序节点下添加一个新的等待节点“copy_等待1”,并将节点重命名为“等待2”。

    图 215 添加“等待2”节点

  3. 通过复制“设置孪生体姿态1”节点的方式添加一个“设置孪生体姿态3”节点,并将位置手动输入设置为“0,0,-0.5”。

    A diagram of a company Description automatically generated

    图 216 设置孪生体姿态3

  4. CTRL+C复制 “等待1”节点,CTRL+V即在顺序节点下添加一个新的等待节点“copy_等待1”,并将节点重命名为“等待3”。

    图 217 添加“等待3”节点

  5. 点击工具栏中的【保存】按钮 保存行为树。

  6. 点击 < 退出行为树编辑器。

  7. 保存“移动的小球”模板。点击主页按钮退出模板编辑器。

  8. 创建一个场景,在场景中添加一个会移动的小球。

    1. 新建一个场景命名为“移动的小球”。

    2. 使用“移动的小球”模板创建一个 “移动的小球1”。

    3. 将“移动的小球1”添加到场景中。

      A screenshot of a computer Description automatically generated

      图 218 添加 “移动的小球1”

  9. 播放场景,预览小球移动的效果。

响应信号改变方块的颜色

在本例中,我们将使用事件节点监听和响应事件,从而改变方块的颜色属性。

前提

请先按创建全新的模板中的步骤准备好“会变色的方块”模板。

  1. 创建一个球体孪生体模板:

    1. 点击主页中的【新建模板】,打开模板编辑器。

    2. 点击工具窗格中的“球体”将其放置到场景区中,并调整其合适位置。

      图形用户界面 描述已自动生成

      图 219 添加球体

  2. 点击工具栏中的保存按钮 ,保存模板名称为“发送信号的小球”。

  3. 为“发送信号的小球”模板添加主功能结构:

    1. 孪生体模板窗格中,点击元数据旁的︙,选择添加结构

    2. 下拉滚动条找到新添加的结构 “Part_1”,点击“Part_1”,在属性区修改结构名称为“主功能”。

    3. 在“主功能”结构下添加 “信号”(Int)属性。

  4. 为“发送信号的小球”模板添加发送信号的行为树:

    1. 孪生体模板窗格中,点击行为树栏旁的︙,选择新建行为树选项。

      图形用户界面, 图表 描述已自动生成

      图 220 创建球体发送信号的行为树

  5. 保存行为树并命名为“发送信号”。

  6. 编辑行为树逻辑:本例中发送三个信号 “100”、“200”和“300”。

    1. 双击“发送信号”行为树,打开行为树编辑器。

    2. 根节点下添加一个顺序节点,并使用默认属性。

    3. 顺序节点下添加一个发送事件节点“发送信号100”,设置这个节点的属性如下:

  • 事件标识符

  • 值的来源:手动输入

  • :100

    1. 顺序节点下添加一个等待节点“等待1”,并设置等待时间的手动输入值为“2”。

    2. 添加“发送信号200”节点:

      1. 复制粘贴“发送信号100”节点,节点将自动添加到顺序节点下方。

      2. 将其重命名为“发送信号200”。

      3. 重新连接顺序节点和“发送信号200”节点。

      4. 修改“发送信号200”节点的事件标识符中的手动输入值为“200”。

    3. 添加一个等待节点“等待2”,并设置等待时间的手动输入值为“2”。

    4. 添加“发送信号300”节点:

      1. 复制粘贴“发送信号100”节点,节点将自动添加到顺序节点下方。

      2. 将其重命名为“发送信号300”。

      3. 重新连接顺序节点和“发送信号300”节点。

      4. 修改“发送信号300”节点的事件标识符中的手动输入值为“300”。

    5. 添加一个等待节点“等待3”,并设置等待时间的手动输入值为“2”。

      下图为完整的行为树结构:

      A diagram of a company Description automatically generated

      图 221 发送信号的行为树

  1. 保存行为树并退出行为树编辑界面。

  2. 保存模板并返回主页界面。

  3. 为“会变色的方块”模板添加接收信号并变色的行为树。

    1. 打开“会变色的方块”模板。

    2. 将方块颜色改为白色。

    3. 在模板里新建一个“事件响应”行为树。

    4. 双击行为树“事件响应”打开行为树编辑界面。

    5. 根节点下添加一个并行节点

    6. 并行节点下添加一个顺序节点“顺序节点1”。

    7. 在“顺序节点1”下添加一个接收事件节点“接收信号100”,设置接收事件节点的属性如下:

  • 事件标识符

  • 值的来源:手动输入

  • :100

    1. 在“顺序节点1”下添加一个设置属性节点,重命名为“设置颜色”,并且设置“设置颜色”节点的属性如下:
  • 目标属性

  • 属性的来源:孪生体中的属性

  • 孪生体的来源:自身

  • 选择属性:颜色(选择“会变色的方块”的“颜色”属性)

  • 数值的设置策略:替换原始值

  • 值的来源:手动输入

  • :255,254,145,10 (对应颜色为 )

    1. 并行节点下添加一个顺序节点“顺序节点2”。

    2. 在“顺序节点2”下添加一个接收事件节点“接收信号200”,设置接收事件节点的属性如下:

  • 事件标识符

  • 值的来源:手动输入

  • :200

  • 值的来源:手动输入

  • :200

    1. 在“顺序节点2”下添加一个设置属性节点,重命名为“设置颜色”,并且设置“设置颜色”节点的属性如下:
  • 目标属性

  • 属性的来源:孪生体中的属性

  • 孪生体的来源:自身

  • 选择属性:颜色(选择“会变色的方块”的“颜色”属性)

  • 数值的设置策略:替换原始值

  • 值的来源:手动输入

  • :100,100,200,200 (对应颜色为 )

    1. 并行节点下添加一个顺序节点“顺序节点3”。

    2. 在“顺序节点3”下添加一个接收事件节点“接收信号300”,设置接收事件节点的属性如下:

  • 事件标识符

  • 值的来源:手动输入

  • :300

    1. 在“顺序节点3”下添加一个设置属性节点,重命名为“设置颜色”,并且设置“设置颜色”节点的属性如下:
  • 目标属性

  • 属性的来源:孪生体中的属性

  • 孪生体的来源:自身

  • 选择属性:颜色(选择“会变色的方块”的“颜色”属性)

  • 数值的设置策略:替换原始值

  • 值的来源:手动输入

  • :255,100,100,100 (对应颜色为 )

    下图为完整的行为树结构:

    图 222 事件响应行为树

  1. 点击工具栏中的【保存】按钮 保存行为树。

  2. 点击 < 退出行为树编辑器。

  3. 保存模板并返回主页界面。

  4. 创建一个新场景,命名为“事件响应”。

  5. 在场景中添加一个能发送事件的球体、两个能接收事件的正方体。

    1. 使用“会变色的方块”模板创建两个方块“方块1”、“方块2”。

    2. 使用“发送信号的小球”模板创建一个 “发信号的球体1”。

    3. 将“方块1”、“方块2”和“发信号的球体1”添加到场景中。

  6. 保存场景。

  7. 播放场景

    图 223 响应事件进行变色

追击移动的小球

本示例介绍如何在虚拟场景中创建一个方块孪生体,并通过行为树逻辑,使其自动追击一个移动的小球。

  1. 创建一个方块孪生体模板:

    1. 点击主页中的【新建模板】,进入模板编辑器。

    2. 在场景区中放置一个“方块”,并调整其合适位置。

    3. 点击工具栏中的保存按钮 ,将模板命名为“追击目标的方块”。

  2. 为“追击目标的方块”模板添加驱动小球移动的行为树:

    1. 孪生体模板窗格中,点击行为树栏旁的︙,选择新建行为树选项。

    2. 保存行为树并命名为“追击目标的方块”。

  3. 编辑行为树逻辑

    1. 双击“追击目标的方块”行为树,打开行为树编辑器。

      1. 根节点下添加一个顺序节点

      2. 顺序节点下添加一个追踪路径规划节点,并配置如下属性:

  • 将路径保存到目标属性

  • 属性的来源:孪生体中的属性

  • 孪生体的来源:自身

  • 选择属性:当前移动路径(“追击目标的方块”的“当前移动路径”属性)

  • 数值的设置策略:替换原始值

  • 起点

  • 值的来源:手动输入

  • :point0

  • 追踪目标

  • 指定孪生体

    • 值的来源:孪生体

    • 孪生体的来源:“场景中的所有孪生体”中的“指定孪生体”

    • 选择方式:“选择孪生体”

    • 孪生体为:“1435”(“会移动的小球”示例中“移动的小球1”的ID,可在属性面板中查看该孪生体的ID)

      1. 顺序节点下添加一个沿路径移动孪生体节点,并配置如下属性:
  • 要移动的目标

    • 值的来源:孪生体

    • 孪生体的来源:自身

  • 使用当前路径:开启

  • 移动过程中需要旋转:开启

  • 进入路径时保持原始旋转角度:开启

  • 转弯的圆角半径:“0”

  • 移动的起点:当前位置

  • 设置目标移动速度:开启

  • 匀速变为减速的位置:“0”

  • 目标速度:“10”

    A screenshot of a computer AI-generated content may be incorrect.

    图 224 设置沿路径移动孪生体节点的属性

  1. 点击工具栏中的【保存】按钮 保存行为树。

  2. 点击 < 退出行为树编辑器。

  3. 保存“追击目标的方块”模板,然后点击主页按钮退出模板编辑器。

  4. **创建一个场景:**新建一个场景命名为“追击移动小球”。

  5. 在场景中添加一个追击目标的方块和一个移动的小球

    1. 使用“追击目标的方块”模板创建一个 “追击目标的方块1”,并将其添加到场景中,位置设为“0,0,0”。

      图形用户界面, 应用程序 描述已自动生成

      图 225 添加“追击目标的方块1”

  6. 将“移动的小球1”添加到场景中,位置设为“0.5,0,-0.5”。

    图形用户界面, 图表 描述已自动生成

    图 226 添加“移动的小球1”

  7. 创建四个点位互相连通的路径

    1. 隐藏“追击目标的方块1”和“移动的小球1”,以免创建路径时路径点的位置被遮挡导致路径点无法准确放置或无法看清,从而影响路径的创建。

      图形用户界面, 文本, 应用程序 描述已自动生成

      图 227 隐藏两个孪生体

  8. 进入路径模式界面,使用构建模式创建以下四个点位,并将它们相互连接起来。这些点位将构成“追击目标的方块1”的移动路径,其中“point0”是其起始点。方块将在这四个路径点构成的路径中计算追击“移动的小球1”的最短路径。

    • point0 (0,0,0)

    • point1 (0.5,0,0)

    • point2 (0.5,0,-0.5)

    • point3 (0,0,-0.5)

  9. 切换至选择模式,将连线方向改为双向。

    图形用户界面, 应用程序 描述已自动生成

    图 228 创建四个点位的路径

  10. 保存路径并退出路径模式界面。

  11. 将“追击目标的方块1”和“移动的小球1”切换至显示状态。

  12. 保存场景。

  13. 播放场景:“追击目标的方块1”会按照最短路径追击“移动的小球1”。

    图 229 追击移动的小球