Chain(链条)

链条沿样条路径或仿真路径移动组件,用于物料搬运系统、换刀器和其他需要连续线性运动的应用。

ℹ️

新功能:Burst 编译器优化在 realvirtual 6.0.9 (beta) 中添加,为链条仿真提供 20-33 倍的性能提升。

概述

链条提供多个组件沿定义路径的连续移动。这对于建模由链条驱动的物料搬运系统或换刀器非常有用。它们始终连接到 Drive 组件,该组件控制链条的移动速度和位置。链条元素在仿真期间沿样条自动创建和定位。

推荐的路径定义:Unity Splines。 在与 Chain 组件相同的 GameObject 上添加 Unity SplineContainer 组件。这是唯一接收错误修复和性能改进的路径定义。

已弃用:旧版点和切线样条。 旧的自定义样条系统(Spline 组件及带有 InTangent/OutTangent 变换的 P1..Pn 子 GameObject)不再维护。现有场景可继续工作,但不会收到错误修复 — 已知问题包括非对称元素放置和两个链条共享一个驱动时的漂移。请迁移到 Unity SplineContainerDemoChain 场景并排展示了两种变体;Chain_UnitySplineHorizontalChain-UnitySplineVertical 是参考设置。

⚠️

仿真路径功能需要 realvirtual Simulation,不包含在基础 realvirtual 包中。realvirtual Simulation 中有单独的演示。

您可以在 Assets/realvirtual/Scenes/DemoChain 找到演示链条功能的演示场景。

基本概念

链条始终连接到驱动,因此链条的移动取决于当前驱动位置和速度。通常,您应使用 Axis 设置为 Virtual 的 Drive 来移动链条。

一个或多个链条元素连接到链条。这些链条元素在仿真启动时由链条自动创建。通常,这些链条元素应为项目中的预制件 (Prefab)。

Chain 脚本需要在同一 GameObject 上有 IChain 实现。使用 Unity SplineContainer(通过 ChainUnitySpline 组件)来定义路径。旧版点和切线样条已弃用 — 请参阅本页顶部的警告。

属性

设置

Chain Orientation

决定链条是水平还是垂直移动。

  • 类型:枚举 (Horizontal, Vertical)
  • 默认值:Horizontal
  • 用例:根据您的机械系统方向进行设置

Chain Element

沿样条的各个链条元素使用的预制件。

  • 类型:GameObject 引用
  • 默认值:None
  • 用例:分配您的自定义链节或载体预制件

Connected Drive

控制链条移动的 Drive 组件。

  • 类型:Drive 引用
  • 默认值:None
  • 用例:连接到具有 Virtual 轴的 Drive 以进行链条控制

Number of Elements

沿样条创建的链条元素总数。

  • 类型:整数
  • 默认值:10
  • 范围:1 到 1000
  • 用例:根据样条长度和元素间距需求调整

Start Position

放置第一个元素时沿样条的偏移位置。

  • 类型:浮点
  • 默认值:0
  • 范围:0 到样条长度
  • 用例:调整起始位置以与机械系统对齐

Calculate Delta Position

自动计算链条元素之间的间距。

  • 类型:布尔
  • 默认值:true
  • 用例:启用以均匀分布,禁用以自定义间距

Scaled On Fixed Length

为外部驱动定位维护恒定的总样条长度。

  • 类型:布尔
  • 默认值:false
  • 用例:当外部驱动器提供元素位置数据时启用

性能优化

Burst 编译器优化

ℹ️

此功能在 realvirtual 6.0.9 (beta) 中添加

Chain 组件支持 Unity 的 Burst 编译器,在仿真大量链条元素时可大幅提升性能。此优化使用 SIMD(单指令多数据)编译为原生代码,提供:

性能基准:

  • 运动学元素 (MoveRigidBody=false):29-33 倍加速
  • 物理元素 (MoveRigidBody=true):19-23 倍加速

工作原理

Burst 优化根据您的链条元素配置以两种模式运行:

运动学模式(最高性能)

  • 使用 Unity 的 TransformAccessArray 进行并行批处理
  • 适用于无需物理交互的可视链条元素
  • 实现 29-33 倍性能提升
  • 在 ChainElements 上设置 MoveRigidBody=false 以使用此模式

物理模式(高性能)

  • 使用传统 Rigidbody 更新和 Burst 编译的计算
  • 当链条元素需要碰撞器交互时需要
  • 实现 19-23 倍性能提升
  • 在 ChainElements 上设置 MoveRigidBody=true 以使用物理

设置说明

一键设置(推荐)

如果未启用 Burst 优化,您将在 Chain Inspector 中看到警告消息,包含性能信息和设置按钮。

Chain Inspector 显示 Burst 优化未启用,带一键设置按钮
  1. 在 Chain Inspector 中点击 Enable Burst Optimization (Install Package & Define) 按钮
  2. Unity 将自动:
    • 安装 Burst 编译器包
    • REALVIRTUAL_BURST 添加到脚本编译符号
    • 启用 Burst 优化重新编译脚本
    • 如有提示,重启 Unity

手动设置

  1. 通过 Package Manager 安装 Unity Burst 编译器包
  2. REALVIRTUAL_BURST 添加到 Project Settings > Player > Script Compilation Symbols
  3. Unity 将自动以 Burst 优化重新编译

设置完成后

启用后,Chain Inspector 显示活动优化的确认:

优化链条元素

为获得最佳性能,请根据 ChainElements 的用途进行配置:

仅可视元素(最快)

Chain Inspector 已启用 Burst 优化,显示性能提示
  • 在 ChainElement 组件上设置 MoveRigidBody=false
  • 用于不需要物理的链节、载体或夹具
  • 通过运动学批处理实现 29-33 倍加速

物理交互元素

  • 在 ChainElement 组件上设置 MoveRigidBody=true
  • 用于具有碰撞器且需与其他对象交互的元素
  • 仍通过 Burst 优化的物理更新实现 19-23 倍加速

ChainElement Inspector 提供内联性能提示,帮助您选择正确的设置。

高级设置

Spline Bake Resolution

ChainElement Inspector 显示 MoveRigidBody 属性及性能指导
  • 控制 Burst 作业使用的预计算样条采样数
  • 值越高 = 插值越平滑但内存使用越多
  • 默认值:100 个采样
  • 根据样条复杂性和可用内存调整

Use Burst Optimization

  • 在运行时启用/禁用 Burst 处理
  • 定义 REALVIRTUAL_BURST 时默认启用
  • 用于性能比较或调试

常见用例

高速斗式提升机

  • 在料斗上设置 MoveRigidBody=false 以获得 29-33 倍加速
  • 料斗无需物理交互即可跟随路径
  • 非常适合物料运输可视化

带负载检测的悬挂式输送机

  • 在载体上设置 MoveRigidBody=true 以实现基于物理的负载拾取
  • 在保持碰撞检测的同时仍实现 19-23 倍加速
  • 当载体与传感器或零件交互时必需

混合配置

  • 在同一链条中组合运动学和物理元素
  • 仅在需要的地方使用物理(如拾取/放置区域)
  • 在保持所需功能的同时优化性能

技术细节

Burst 优化通过以下方式工作:

  1. 将样条位置和切线预计算到原生数组中
  2. 并行批处理所有元素位置更新
  3. 使用 SIMD 指令进行向量化计算
  4. 最小化托管到原生的转换

系统自动处理:

  • 样条位置插值
  • 元素方向的切线计算
  • 与驱动事件同步的批处理更新
  • 原生数组的内存管理

使用示例

基本链条设置

  1. 使用 Unity Splines 或自定义样条创建样条路径
  2. Chain 组件添加到样条 GameObject
  3. 添加 ChainUnitySpline 组件以集成 Unity Splines
  4. 分配 Chain Element 预制件
  5. 连接到具有 Virtual 轴的 Drive 组件
  6. 根据您的需求设置 Number of Elements

Unity Splines 集成

我们推荐使用 Unity Splines 作为链条路径。为此,必须安装 Unity Splines 包。

安装 Unity Splines 包后,可按以下方式定义链条:

  1. Project Settings > Player 中,在 Script Compilation Symbols 下添加 REALVIRTUAL_SPLINES 以在 realvirtual 链条中使用 Unity Splines
  2. 在 Hierarchy 中右键单击,从 Spline 菜单中选择所需的基础样条
  3. Unity 在场景视图中提供样条编辑模式以调整样条控制点。对于每个样条控制点,Unity 还显示该点处的向上方向(红色箭头)。如果您要设置垂直链条,这很重要
  4. ChainUnitySplineChain 组件添加到创建的 GameObject 上

链条设置完成后,即可与 ChainElements 和驱动一起使用。

垂直链条配置

要构建垂直链条,请按以下步骤操作:

  1. 从右下角锚点开始,沿正 Z 方向顺时针构建样条
  2. 保持恰好 90 度的垂直角度。避免倾斜以防止与表示高度差的插值曲线不对齐
  3. 请注意,这些说明目前仅适用于具有四个锚点(且不超过四个)的样条
  4. 确保链条元素的正面也朝向正 Z 方向。此方向对于父 GameObject 是必需的
  5. Chain Orientation 设置为 Vertical
💡 提示
对于垂直链条,使用恰好四个锚点并保持精确的 90 度角,以防止与插值曲线不对齐。

Editor 工具

样条构建(已弃用)

本节描述旧版点和切线样条。它不再维护 — 请改用 Unity Splines。此处的描述作为现有场景的参考保留。

要扩展样条或创建第一个点,您可以点击 Spline 上的 Extend 按钮。这会生成一个带有 2 个切线点的点。您可以像任何 GameObject 一样移动这些点来构建样条。这些 GameObject 的顺序也定义了样条中点的顺序。如果选择 Loop,样条将闭合,最后一个点连接到样条的第一个点。

Unity Splines Editor

  • 场景视图中的可视样条编辑
  • 带手柄的控制点操作
  • 用于垂直链条设置的向上方向指示器(红色箭头)
  • 实时样条预览和调整

另请参见


© 2025 realvirtual GmbH https://realvirtual.io - 版权所有。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、复印、录制或其他电子或机械方法)复制、分发或传播本出版物的任何部分。