组碰撞检查器 (Group Collision Checker)(Pro)
概述 (Overview)
GroupCollisionChecker 检测命名的 realvirtual 组之间的运行时碰撞。同一组内的对象永远不会相互碰撞(自碰撞被抑制),而来自不同组的对象会自动触发碰撞事件。
这对于监控机械臂是否与机床夹具碰撞,或夹爪是否穿透工件支架非常有用——不会因同一运动链内的关节产生误报。

此功能在 realvirtual 6.3.0(Professional)中添加
工作原理 (How It Works)
系统使用一个专用的物理层 (rvCollissionCheck),该层与所有其他 realvirtual 层(传感器、传送面、接收器)隔离。在该层内:
- 同组碰撞体对通过
Physics.IgnoreCollision抑制 - 跨组碰撞体对自动触发碰撞事件
- 无论定义多少组,仅消耗 一个物理层
此设计避免了层级耗尽,并防止对传感器或传输系统产生副作用。
快速入门 (Quick Start)
- 在场景中的任意 GameObject 上添加 GroupCollisionChecker 组件
- 在 Collision Groups 中添加条目——每个条目是一个 realvirtual 组名加碰撞体模式
- 可选地为基于 GPU 的高亮分配 MultiObjectOverlayRendererFeature 引用
- 按 Play——碰撞通过信号、事件和检视器状态进行检测和报告
属性 (Properties)
碰撞组 (Collision Groups)
Collision Groups(列表)要监控的组。每个条目定义:
- Group Name — realvirtual 组名(通过 Group 组件分配)
- Collider Mode — 如何为此组中的对象创建碰撞体:
- BoxApproximation — 从渲染器边界创建 BoxCollider。快速且安全,但较粗糙。
- MeshCollider — 创建凸面 MeshCollider。更精确,使用凸包(最多 255 个顶点)。
- ExistingOnly — 仅使用已存在的碰撞体。没有碰撞体的对象将被跳过。
设置 (Settings)
Auto Setup On Start(布尔值)启用时,碰撞系统在仿真开始时自动初始化。禁用此选项可从脚本手动调用 SetupCollisionSystem()。
高亮 (Highlight)
Highlight On Collision(布尔值)通过 URP Overlay Renderer Feature 启用碰撞对象的 GPU 加速视觉高亮。
Overlay Feature(引用)从您的 URP Renderer Asset 中分配一个专用的 MultiObjectOverlayRendererFeature 实例。这必须是与选择系统使用的实例分开的单独实例。
Highlight Color(Color)应用于碰撞对象的高亮覆盖颜色。默认值:红色。
Overlay Mode(枚举)高亮的渲染样式:Default、XRay 或 Blink。
Blink Speed(浮点数)当 Overlay Mode 设置为 Blink 时,以每秒周期数为单位的闪烁频率。
Reset Mode(枚举)控制何时移除高亮:
- WhileColliding — 碰撞结束时高亮自动消失
- OnEnterPersistent — 高亮保持直到通过 ResetHighlight 信号手动重置
接口连接 (Interface Connection)(PLC 信号)
CollisionActive (PLCInputBool) 输出到 PLC——当至少一个跨组碰撞活动时为 true。
CollisionCount (PLCInputInt) 输出到 PLC——当前活动碰撞对的数量。
ResetHighlight (PLCOutputBool) 从 PLC 输入——上升沿清除所有碰撞高亮。
ResetCollisions (PLCOutputBool) 从 PLC 输入——上升沿重置所有碰撞跟踪。
事件 (Events)
OnCollisionEnterEvent (UnityEvent) 跨组碰撞开始时触发。提供涉及的两个 GameObject。
OnCollisionExitEvent (UnityEvent) 跨组碰撞结束时触发。提供涉及的两个 GameObject。
高级 (Advanced)
Excluded Pairs(列表)要从检测中排除的特定跨组对。例如,如果夹爪接触是预期的,则排除"Gripper"与"Workpiece"。
状态 (Status)(只读)
Is Colliding — 当至少一个碰撞活动时为 true
Active Collision Count — 活动碰撞对的数量
Total Proxy Count — 管理的碰撞体代理总数
Highlighted Renderer Count — 当前高亮的渲染器
Active Pairs — 当前碰撞对的可读列表
碰撞体模式建议 (Collider Mode Recommendations)
| 组类型 | 推荐模式 | 原因 |
|---|---|---|
| 机器人关节 | ExistingOnly | 手动放置的胶囊/盒碰撞体更精确 |
| 机床框架 | BoxApproximation | 部件多,粗略检测即可 |
| 夹爪/工具 | MeshCollider | 准确形状对接触检测很重要 |
| 安全区域 | ExistingOnly | 手动放置的盒触发器作为区域边界 |
典型用例 (Typical Use Cases)
机器人 vs 机床框架 — 6 轴机械臂(组"RobotArm")在机床框架(组"MachineFrame")附近移动。机器人关节内的自碰撞被抑制。机器人与框架之间的任何接触都会触发红色闪烁高亮并设置 PLC 信号以停止机器人。
夹爪 vs 夹具 — 夹爪(组"Gripper")从夹具(组"Fixture")中拾取部件。夹爪与工件的接触通过 Excluded Pairs 排除。只有非预期的夹爪与夹具接触才会触发警报。
多个机器人 — 两个机器人(组"Robot1"、组"Robot2")在重叠的工作区域内工作。每个机器人的内部关节不会触发警报,但任何机器人之间的接触都会触发。
高亮设置 (Highlight Setup)(URP)
要使用高亮功能,您需要在 URP Renderer 中添加第二个 MultiObjectOverlayRendererFeature:
- 打开您的 URP Renderer Asset(通常是
URP-Default-Renderer.asset) - 点击 Add Renderer Feature 并选择 Multi Object Overlay Renderer Feature
- 将其命名为"CollisionOverlay"以与选择覆盖区分
- 将此新功能分配给 GroupCollisionChecker 上的 Overlay Feature 字段
现有的覆盖功能(由选择系统使用)保持不变。
脚本 API (Scripting API)
// 手动设置(如果 AutoSetupOnStart 为 false)
checker.SetupCollisionSystem();
// 清除高亮而不重置跟踪
checker.ClearAllHighlights();
// 重置所有跟踪(高亮 + 活动对)
checker.ClearCollisionTracking();
// 通过 C# 委托订阅碰撞事件
checker.OnGroupCollisionEnter += (objA, objB) => {
Debug.Log($"Collision: {objA.name} <-> {objB.name}");
};
checker.OnGroupCollisionExit += (objA, objB) => {
Debug.Log($"Collision ended: {objA.name} <-> {objB.name}");
};
另请参阅 (See Also)
- Group — 将对象分配到组
- Group Manager — 在运行时隐藏/显示组
- Selection Window — 在编辑器中按组筛选