多用户 (已废弃)

已废弃 — 正在迁移至 realvirtual WEB。 基于 Unity 的多用户系统 (Mirror networking) 已废弃。实时多用户协作现已在 realvirtual WEB 中通过基于浏览器的 MultiplayerWEB 中继运行:共享头像、相机位置和实时机器状态,跨 Unity 和任何浏览器客户端 — 一个链接,任何设备,无需网络设置。

概述

realvirtual.io 提供多用户功能,实现跨多台计算机或运行的 Unity 实例的无缝协作和同步。此功能在指定的主机和连接的客户端之间同步驱动位置、信号和多用户 (MU) 位置。其工作原理如下:

关键功能:

  • 同步: 所有驱动位置、信号和 MU 位置在主机和客户端之间实时同步。
  • 主机配置: 系统中始终有一个指定的主机负责物理仿真,包括碰撞检测和解决。
  • 网络设置: 目前使用 Mirror networking 框架(访问 Mirror)进行本地网络通信,确保本地环境内高效的数据交换。
ℹ️

基于 Socket.io 的通信层的开发正在进行中,将连接能力扩展到本地网络之外。这个即将推出的功能将实现跨边界通信,促进跨不同网络和环境的连接。

使用演示模型的初步步骤

为了快速入门,我们建议使用位于 Assets/realvirtual-XR/DemoMultiuser.unity 的演示模型。按照以下步骤:

  1. 编译演示模型为构建版本:
    • 将演示场景添加到 Unity 的 Build Settings 中。
    • 将项目构建为 Windows 可执行文件。
    • 连接到 Unity Editor:
    • 启动构建好的可执行文件。
    • 使用屏幕底部的 UI 选择 "Client" 切换到客户端模式。
    • 场景将以独立模式运行,直到有主机加入。
ℹ️

对于更高级的用户和自定义开发,考虑使用 Parallelsync,可在 GitHub 上获取:ParrelSync。Parallelsync 允许同时在同一个项目上运行多个 Unity 实例。然而,对于基本功能,按照上述说明编译构建就可以了。

现在在您的 Unity editor 中启动相同的场景,如有必要切换到 "Host" 模式。一旦客户端连接,您将看到类似以下的消息:

作为 Windows 构建的演示场景处于客户端模式,等待主机连接

现在您可以在 Unity editor 中控制场景。例如,在场景模式下使用鼠标移动一些 MU,您将看到客户端精确地跟随这些位置。

客户端连接后主机上的消息

多用户组件

Multiuser Connection

多用户功能的主要组件是 "MultiuserConnection",它作为一个 prefab 提供,位于 Assets/realvirtual-XR/MultiuserConnection.prefab

Imverse Controller

在此 prefab 中,"ImverseController" 会自动向场景中需要同步的所有必要组件添加 "Imverse" 组件。此过程根据客户端是作为主机进入还是当客户端连接到主机而动态发生。

Imverse Communication Mirror

Multiuser Connection 中的 "ImverseCommunicationMirror" 组件处理 Mirror 连接设置。以下是配置方法:

  • IsHost: 如果您希望此实例作为主机,设置为 true。如果它应作为客户端,设置为 false。
  • AutoConnect: 当在客户端启用时,会在应用程序启动时自动尝试连接到主机。
  • Network Address: 在客户端上,指定主机运行的网络地址。例如,对于本地主机使用 "127.0.0.1"。此设置在服务器端被忽略。

Imverse 组件

一旦连接建立,场景中的组件(如 Drives)将配备一个额外的 "ImverseDrive" 组件。这些组件管理关键信息,包括一个 ID(例如 /ConveyorBox)和一个 Status(例如 "Owner")。该 ID 基于场景中的路径唯一标识同步组件。保持每个路径内的唯一命名约定至关重要,以避免冲突。此唯一性在仿真开始时自动验证,任何非唯一命名的问��都会在控制台中记录。

当一个组件作为所有者时,它发送信息到所有连接的客户端。反过来,如果一个组件作为消费者,它从所有者接收信息。

以下 Imverse 组件可用:

  • ImverseDrive: 添加到所有 Drives 以同步其位置,表示为 float 值。
  • ImverseMU: 添加到所有 MU(可移动单元)以同步其位置 (Vector3) 和旋转 (Quaternion)。
  • ImverseUser: 添加到 User,同步其位置和旋转。本地 User 的位置始终同步到本地实例中的相机位置。对于其他用户,其位置同步到他们各自的位置。
  • ImverseSignal: 跨连接的实例同步信号值。

这些 Imverse 组件促进了跨网络环境的位置、旋转和信号的无缝同步,确保所有连接的用户获得一致的仿真体验。

Multiuser Connection Status

"MultiuserConnectionStatus" prefab,位于 Assets/realvirtual-XR/MultiuserConnectionStatus.prefab,作为 UI 显示元素,用于管理场景中的 Client 和 Host 模式。要集成此 prefab,只需将其拖到需要的场景位置。

此 prefab 负责管理 "ImverseCommunication" 中的 Host 和 Network 设置。如果您选择不使用此 prefab,则需要在 Multiuser Connection 组件中手动配置这些设置。