传输表面(TransportSurface)

传输表面组件模拟用于在工业自动化流程中移动对象的传送带和传输系统。它提供基于物理的对象沿定义传输路径的移动,支持线性传送带和旋转系统(如转台)。

对于使用 MU(可移动单元)建模传送带系统,TransportSurface 提供了必要的物理基础。

⚠️ 注意
对于标准速度控制堆积传送带系统,应使用基于纯物理的方法,使用 TransportSurface
但是,如果这种方法变得不稳定或不精确——特别是在位置控制系统中(例如由 PLC 驱动)——请考虑切换到引导式传输设置:
* 使用 GuidedTransport 进行力基控制。
* 使用 KinematicMU 进行完全位置控制的运动学移动,而不违反物理约束。

传输表面始终连接到一个控制速度和位置的驱动器(Drive)。TransportSurface 会自动检测父级层级中的驱动器组件并与之连接。

ℹ️

如果驱动器的稳定性有问题,请检查物理(Physics)以及物理章节中的物理(Physics)部分。

设置

基本配置

  1. 添加带有几何体(网格或简单盒子)的传送带游戏对象
  2. 添加 Drive 组件来控制移动方向和速度
  3. 添加 TransportSurface 组件 - 它会自动连接到驱动器

TransportSurface 会自动检测并连接到父级对象中的 Drive 组件。

属性

核心属性

驱动器引用(Drive Reference)Drive):自动驱动器检测的可选覆盖。标准使用时留空(null)- 系统会自动查找父级 Drive 组件。在需要特定驱动器连接的特殊情况下使用。

层(Layer)(字符串):物理层分配(默认:"rvTransport"),用于传输仿真物理计算。

使用网格碰撞器(Use Mesh Collider)(布尔值):控制碰撞精度与性能。BoxCollider(默认)提供更好的性能。MeshCollider 为复杂几何体提供精确碰撞。更改会立即在 Unity 检视器(Inspector)中生效。

视觉属性

高级表面(Advanced Surface)(布尔值):启用带有动画纹理的皮带可视化。适用于所有几何体配置,包括运动学组。

动画表面(Animate Surface)(布尔值):启用与传输速度同步的纹理动画。

纹理缩放(Texture Scale)(浮点数):纹理动画速度乘数,以纹理单位/米为单位。

约束管理

进入/离开时更改约束(Change Constraints On Enter/Exit)(布尔值):当对象进入/离开传输表面时修改刚体约束。

层级系统

父级驱动器(Parent Drive)Drive):用于传输表面相对于父级驱动器移动的多轴系统(转台、升降传送带)。

碰撞器处理

TransportSurface 自动处理碰撞检测 - 在已有碰撞器时直接使用,在需要时自动创建。

碰撞器管理

已有碰撞器:如果 TransportSurface 游戏对象已具有碰撞器(BoxCollider 或 MeshCollider),则直接使用它们。

运动学组集成:如果 TransportSurface 具有启用了组集成的 Kinematic 组件:

  • 首先在运动学组中搜索已有碰撞器
  • 如果找到已有组碰撞器,则重用它们以获得最佳性能
  • 如果没有组碰撞器,则基于整个运动学组中的所有网格创建组合的 MeshCollider

自动创建:如果没有碰撞器且未配置运动学组,TransportSurface 将在运行时使用以下系统自动创建:

  1. 标准碰撞
    • BoxCollider(默认):大多数传送带的快速、可靠碰撞
    • MeshCollider(精确):复杂形状的精确碰撞匹配
    • 从您的几何体自动计算正确的尺寸
    • 回退
    • 即使几何体缺失也会创建基本碰撞
    • 通过警告保持仿真运行
    • 防止常见的"对象穿透"问题
ℹ️

碰撞器策略:TransportSurface 尊重您已有的碰撞器设置。如果您手动为游戏对象添加了碰撞器,它们将按原样使用。仅在没有找到碰撞器时才会自动创建。

编辑器时碰撞器切换

当您在 Unity 检视器中切换使用网格碰撞器(Use Mesh Collider)属性时,碰撞器类型会立即切换:

  • 在开发过程中提供视觉反馈
  • 仅影响 TransportSurface 游戏对象
  • 自动处理组件清理和创建

层管理

所有传输表面碰撞器都自动分配到 rvTransport 层进行物理计算。系统会验证层分配并对可能影响性能的配置问题发出警告。

最佳实践:对于复杂的 CAD 导入传送带系统,使用具有组集成的 Kinematic 组件。这通过共享分组对象的碰撞器来提高性能。

高级表面(Advanced Surface)

高级表面选项启用增强的视觉表现,现在适用于所有几何体配置:

通用几何体支持:

  • 简单对象:使用直接的 MeshRenderer/MeshFilter 组件
  • 运动学组:使用 Kinematic 组件自动处理分组的分布式几何体
  • 复杂层级:适用于子对象中的任何渲染器配置

启用高级表面后,会在 TransportSurface 下创建一个名为 Belt 的子游戏对象。它包括具有动画纹理效果的 ConveyorBelt 组件,可精确跟踪表面几何体——包括曲线。

系统自动执行以下操作:

  • 从任何几何体配置(直接网格、运动学组或子渲染器)计算边界
  • 根据几何体设置适当隐藏原始渲染器
  • 在 ConveyorBelt 预制件缺失时提供错误恢复
  • 安全地处理编辑器和运行时场景
  • 具有增强几何体支持的 Advanced Surface
    高级 Surface 纹理动画

将驱动器连接到传输表面

TransportSurface 具有自动驱动器检测功能,使设置变得简单直观:

自动驱动器连接

添加 TransportSurface 组件时:

  1. 灵活的驱动器放置Drive 组件可以与 TransportSurface 在同一游戏对象上,或在层级中的任何父级游戏对象上
  2. 自动发现:系统自动搜索当前游戏对象,然后沿层级向上搜索 Drive 组件
  3. 连接:找到的 Drive 组件会链接到 TransportSurface
  4. 视觉反馈:连接在 Unity 检视器中可见
  5. 自动设置:适用于标准传送带配置
ℹ️

驱动器放置选项

* 同级Drive 和 TransportSurface 在同一游戏对象上(最简单的设置)

* 层级Drive 在父级游戏对象上,TransportSurface 在子游戏对象上(复杂系统的常见配置)

传输表面驱动器之上的驱动器 - 使用父级驱动器(Parent Drive)

ℹ️

ParentDrives 仅在 IsKinematic 驱动器以线性方向或旋转方向移动 TransportSurfaces 时需要,例如转台或升降设备。

有时 Unity 物理非常复杂,掌握它的解决方案有些奇特。如物理(Physics)中所述,线性或旋转轴的正常移动不是基于 IsKinematic 刚体完成的。变换是基于 Unity 层级和 Unity 变换(Transform)的位置进行的,因为这样做通常更稳定。

ℹ️

传输表面与轴的常规线性或旋转运动不同。它使用纯 Unity 物理函数来传输 MU

这造成了一个问题。例如,如果需要在传输表面本身的基础上组合线性或旋转运动,就会产生问题。Unity 不会按预期移动传输表面碰撞器(Collider)

为防止此问题,传输表面上提供了 ParentDrive 选项:

此选项将在仿真启动时自动解耦传输表面,并使其功能按预期运行。仿真期间,传输表面将位于层级顶层的无父级对象。您可以在演示模型 TurningAndLiftingTransportSurface 中看到一个示例,位于 realvirtual.io > Scenes 下:

构建更复杂的运动学结构时,始终确保具有 TransportSurface 组件的游戏对象与属于该表面的其他驱动器的运动学结构保持并行。另一个示例模型是 MovingTransportSurface,也位于 realvirtual.io > Scenes 下。下图显示了如何定义这样的结构。传输表面的父级驱动器是运动学结构中最低层的那个。

ℹ️

如果传输表面的父级驱动器是旋转的,两个对象的枢轴点(旋转中心)必须位于同一位置,才能正确传递运动。必要时,需要插入一个空游戏对象来实现此目的。

被传输对象的约束

您可以选择是否更改进入传输表面的对象的约束。将布尔值 ChangeConstraintsOnEnterChangeConstraintsOnExit 设置为 true 即可实现。

⚠️

当您更改约束时,当对象离开传输表面时,它们不会自动恢复到先前的设置。为此,您需要将 ChangeConstraintsOnExit 设置为 true 并定义值。选择"None"将移除对象的所有约束。

故障排除

对象穿透传输表面

症状MU 穿过传送带而不是被传输。

解决方案:检查检视器中的层分配 - 应为 "rvTransport"。

原因和解决方案

  • 层不匹配:点击 TransportSurface 游戏对象,检查检视器中的 Layer 下拉菜单
  • 缺失碰撞器:为复杂几何体启用"使用网格碰撞器",或验证 BoxCollider 是否存在
  • 运动学组问题:确保所有 CAD 部件在其 Group 组件中使用相同的 GroupName

注意:使用自动设置以避免手动创建碰撞器可能导致层问题。

复杂 CAD 模型性能不佳

症状:帧率下降、物理迟钝或传送带响应缓慢。

解决方案:添加 Kinematic 组件并启用 IntegrateGroupEnable

性能优化步骤

  1. 添加 Kinematic 组件到 TransportSurface 游戏对象
  2. 设置 IntegrateGroupEnable = true
  3. 为所有相关的 CAD 对象分配相同的 GroupName
  4. 如果不是必需的,切换到 BoxCollider

性能影响:对于复杂的 CAD 装配体,可将仿真速度提高 10 倍。

高级表面不工作

症状:增强皮带视觉效果不出现或尺寸错误。

诊断:检查控制台是否有"ConveyorBelt prefab not found"错误。

按原因的解决方案

  • 缺失预制件:ConveyorBelt 预制件必须存在于 Resources 文件夹中
  • 无几何体边界:添加渲染器组件或验证运动学组设置
  • 运动学组问题:检查所有 Group 组件中的组名是否匹配

注意:先用简单几何体测试高级表面,然后再应用于复杂模型。

驱动器连接问题

症状:传送带不动、速度不同步或无运动响应。

解决方案:检查 Drive 组件是否存在于同一游戏对象或父级游戏对象上。

连接故障排除

  1. 驱动器放置Drive 必须与 TransportSurface 在同一游戏对象上或在父级游戏对象上(不能在兄弟对象上)
  2. 多个驱动器:设置驱动器引用(Drive Reference)属性来指定使用哪个 Drive
  3. 驱动器配置:验证 Drive 组件是否已启用并正确配置
  4. 层级检查:确保 TransportSurface 能够在其层级路径中"看到" Drive

注意:使用支持的层级结构:

  • 简单Drive + TransportSurface 在同一游戏对象上
  • 层级Drive(父级)→ TransportSurface(子级或后代)

性能提示:对于大规模传输系统,使用 Kinematic 组件对相关 CAD 对象进行分组。这消除了单独的碰撞器,可将性能提高 10 倍。

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