多人协作 (Professional, 已弃用)
已弃用 — 正在迁移到 realvirtual WEB。 基于 Unity 的多人协作 (Netcode for GameObjects / Unity Relay) 已弃用。实时多用户协作现在通过 realvirtual WEB 中基于浏览器的 MultiplayerWEB 中继运行:共享虚拟形象、相机位置和实时机器状态,跨 Unity 和任何浏览器客户端,无需网络设置和端口转发。
多人协作功能仅在 Professional 版本中可用,需要 Unity Netcode for GameObjects 和 Unity Services。
实时协作工业自动化仿真,支持多用户和 VR/AR 集成。
概述
realvirtual Professional 多人协作系统支持多个用户同时与相同的虚拟调试场景交互。基于 Unity Netcode for GameObjects 和 Unity Relay Service 构建,提供同步的自动化组件、实时物料流和协作设计评审能力。
核心功能
- 多用户协作:同一仿真中可扩展的并发用户
- 实时同步:所有自动化组件(驱动、传感器、MU、Source)跨客户端同步
- VR/AR 支持:完整的 XR 控制器跟踪和虚拟形象表示
- 工业集成:PLC 信号同步和自动化逻辑共享
- 云端连接:使用 Unity Relay Service 进行安全的点对点连接
系统要求
Unity 包
- Unity Netcode for GameObjects:核心网络框架
- Unity Transport (UTP):带 DTLS 加密的网络传输层
- Unity Services Core:认证和 Unity Services 集成
- XR Interaction Toolkit(可选):用于 VR/AR 功能
设置
1. Unity Services 配置
- 在 Project Settings → Services 中启用 Unity Services
- 创建 Unity Project ID 或链接到现有项目
- 在 Unity Dashboard → Multiplayer → Relay 中启用 Relay Service
- 为匿名用户会话启用 Authentication
2. 场景设置
- 从 realvirtual Professional 包中将 Multiplayer 预制体添加到场景
- 该预制体包含所有必要的组件:NetworkManager、RelayConnectionManager、NetworkInitializer 和 MultiuserWindow
- 所有网络预制体已预配置并自动注册

NetworkManager 配置,显示 Unity Transport 设置、中继连接管理器和网络预制体注册
3. 自动化组件设置
系统自动创建以下组件的网络化版本:
- 驱动:位置和速度同步
- 传感器:占用状态同步
- MU(可移动单元):变换和标识同步
- Source:物料生成事件
- 信号:PLC 信号值和状态
使用方法
启动主机会话
- 通过 realvirtual → UI 工具栏打开 Multiuser 窗口
- 输入玩家名称(本地存储)
- 点击"Host"创建会话
- 与其他用户分享加入代码
作为客户端加入
- 打开 Multiuser 窗口
- 输入玩家名称
- 输入从主机收到的加入代码
- 点击"Client"加入会话

连接状态
- Connected:已成功连接到多人协作会话
- No Connection:未连接或连接失败
同步组件
NetworkDrive
- 位置值:当前驱动位置
- 速度值:当前驱动速度
- 权限:主机控制驱动,客户端接收更新
- 覆盖模式:客户端使用 PositionOverwrite 和 SpeedOverwrite
NetworkMU(可移动单元)
- 变换:位置和旋转
- 标识:LocalID、GlobalID、Name
- 物理:主机维护物理权威,客户端使用运动学模式
- Source 跟踪:对创建 Source 组件的引用
客户端机器上的物理对象必须设置为运动学 (kinematic) 模式,以防止与主机的权威物理仿真冲突。
NetworkSensor
- 占用状态:布尔占用/空闲状态
- 网络模式:客户端自动切换到网络控制模式
- 实时更新:即时的传感器状态传播
NetworkSignal
- 信号值:所有 PLC 信号类型 (PLCInputBool, PLCOutputFloat 等)
- 双向:主机到客户端的信号同步
- 基于字符串:通用值表示
NetworkPlayer
- 玩家名称:持久化的玩家标识
- XR 控制器:左右控制器的位置/旋转同步
- 虚拟形象可见性:第一人称视角(自己的虚拟形象隐藏)
- 相机跟踪:远程用户视角同步
VR/AR 集成
XR 设置
- 安装 XR Interaction Toolkit
- 配置 XR 控制器为 "LeftController" 和 "RightController" 组
- 在 realvirtual-XR 包中启用 XR 支持
- 在多人协作会话前测试控制器跟踪
支持的 VR 系统
- Meta Quest 2/3:已与 Touch 控制器完全测试
- 其他 OpenXR 设备:通过 Unity XR 系统兼容
- 混合现实:VR 用户与桌面用户混合使用
性能注意事项
网络优化
- 变化检测:仅在值发生变化时同步数据
- 更新频率:FixedUpdate (50Hz) 确保平滑同步
- 插值:客户端控制器平滑移动
- 权威模型:主机维护物理,客户端仅显示
最佳实践
- 监控同时 MU 数量:高 MU 数量可能影响网络性能,具体取决于带宽
- 使用适当的更新速率:平衡响应性和带宽(默认 50Hz)
- 测试网络条件:在真实网络延迟下验证性能
- 监控连接质量:使用 Unity Profiler 进行网络分析
- Unity Transport 配置:使用默认设置以获得最佳 Relay 性能
故障排除
连接问题
- Unity Services 认证:验证 Project Settings → Services 中是否启用了匿名认证
- Relay 分配:检查 Unity Dashboard 中的 Relay 服务状态和 CCU 限制
- 防火墙设置:确保允许 UDP 流量(Unity Transport 使用 UDP)
- 加入代码有效性:加入代码在超时后过期(通常 10 分钟)
- 包安装:验证 Unity Netcode for GameObjects 是否正确安装
使用 Unity Profiler → Networking 标签页监控多人协作会话期间的连接质量和带宽使用。详见 Unity Netcode Profiler 文档 进行详细分析。
同步问题
- 网络预制体:验证所有自动化组件是否有对应的网络预制体
- 场景路径解析:检查 GameObject 层级在客户端之间是否匹配
- 权限冲突:确保仅主机修改权威数据
- 物理冲突:验证客户端 MU 使用运动学刚体
性能问题
- 带宽使用:在 Unity Profiler 中监控网络流量
- 更新频率:如有需要,降低 FixedUpdate 速率
- 对象数量:限制同步对象的数量
- 连接稳定性:在真实网络条件下测试
API 集成
自定义组件同步
要同步自定义自动化组件:
public class CustomNetworkComponent : NetworkBehaviour
{
[SerializeField] private NetworkVariable<float> customValue = new NetworkVariable<float>();
public override void OnNetworkSpawn()
{
if (IsHost)
{
// 初始化主机控制的值
customValue.Value = GetComponentValue();
}
}
private void FixedUpdate()
{
if (IsHost)
{
// 值变化时更新网络变量
float newValue = GetComponentValue();
if (Math.Abs(customValue.Value - newValue) > 0.001f)
{
customValue.Value = newValue;
}
}
else
{
// 在客户端应用接收到的值
ApplyNetworkValue(customValue.Value);
}
}
}