共享场景示例
更新时间: 2024年11月4日
Unity-SharedSpatialAnchors 场景共享旨在演示如何使用共享空间锚点 API。该 API 在 Unity 游戏引擎的
Meta XR 核心 SDK 中提供。该示例应用展示了如何创建、保存、加载以及共享空间锚点,还展示了如何共享场景对象(墙壁、地板、书桌、餐桌等)。
在锚点和场景共享方面,该应用采用 Photon Unity Networking 共享玩家数据,允许用户与同地空间内的网络对象互动。
若要共享空间锚点,您的应用需要使用 Quest 平台功能。
- 在您的开发者组织下点击创建新应用。
- 输入应用名称。
- 选择 Meta Horizon 商店。如果您也会在电脑上使用 Link 运行应用,则重复上述步骤,创建一个 Rift 应用。
- 从左侧导航栏中选择要求 > 数据使用情况检查,
- 完成年龄段自证,然后请求访问用户编号和用户档案平台功能。
- 从左侧导航栏中选择开发 > API。确定选好应用之后,记下应用编号下面的数字。
在 Unity 中打开项目后,在 V63 SDK 中前往 Meta 或 Oculus > 平台 > 编辑设置。
- 将此前步骤中找到的 Quest 应用编号输入到 Meta Quest/2/Pro 字段中。
- 如果您想用 Link 进行测试,请在 Oculus Rift 字段中注明 Rift 应用编号。
- 在构建设置下,将捆绑包标识符更换为有效且唯一的 Android软包名称,如 com.yourcompany.ssa_sample。您应用的锚点将与该包名称相关联。
本项目使用 Photon 的 PUN 来支持多玩家游戏网络。创建新 Photon 应用程序的步骤如下:
- 在 Photon 上创建一个账户。
- 在面板页面上根据提示创建一个新应用。
- 选择 Photon SDK:设置为 PUN。
- 名称和描述:可随意设置。
- 网址:可留空。
- 在您的开发者账户上创建一个 PUN 应用,然后将应用编号添加到
Assets/Photon/PhotonUnityNetworking/Resources/ 下 PhotonServerSettings 文件中的 App Id Pun 条目。您可以通过菜单窗口 > Photon Unity Networking > 突显服务器设置找到 PhotonServerSettings。
OVRManager 配置
OVRManager 组件能与每个场景中的 OVRCameraRig 对象相连。
OVRManager 的以下参数必须进行 SSA 配置:
- 追踪来源类型:STAGE
- STAGE 追踪来源类型将确保发生重新回位事件时,虚拟对象不会移动。
- 锚点支持:启用
- 共享空间锚点支持:必备或支持
Android 清单工具可用于更新您的项目清单,以支持 SSA。
V63 SDK 中的 Meta 或 Oculus > 工具 > 创建与商店兼容的 AndroidManifest.xml
使您的应用支持 SSA 和透视需要获得以下权限:
- <uses-permission android:name=”com.oculus.permission.USE_ANCHOR_API” />
- <uses-permission android:name=”com.oculus.permission.IMPORT_EXPORT_IOT_MAP_DATA” />
- <uses-feature android:name=”com.oculus.feature.PASSTHROUGH” android:required=”true” />
与上述 OVRManager 配置联用时,Oculus 清单工具将添加这些权限。
加入场景时,您会处于一个以左右控制器作为虚拟表示的透视环境中。
控制面板会跟随左控制器。您可以用右控制器与它互动,然后按下控制器上带有白点的菜单按钮。使用控制面板创建或加入一个房间即可开始。
控制面板的主菜单包含以下功能:
- 切换锚点创作器:切换锚点创作模式。启用后,可以在您的右手边看到锚点预览。按下触发器可将新的空间锚点放入场景中。
- 加载本地锚点:下载并实例化头戴设备上保存的锚点。
- 生成互联立方体:在菜单正上方生成一个立方体。房间里所有玩家都能看见和抓取这个立方体。抓取立方体的操作会将网络所有权转移给拿到立方体的玩家。
- Photon 信息面板:显示玩家已连接到的 Photon 房间、当前连接状态以及房间内的用户列表。
- 日志记录面板:菜单的右半部分用于日志记录(调试目的)。您可以按右下方的箭头按钮,查看多个日志页面。
生成锚点时,锚点面板会随之出现。
锚点面板包含以下功能:
- 本地保存锚点:将锚点保存到本地头戴设备上。若要加载锚点,从控制面板选择加载本地锚点选项即可。
- 隐藏锚点:从场景中删除锚点,但如果之前已保存,锚点仍会保存在您的本地头戴设备上。若要重新生成锚点,在控制面板上选择加载本地锚点选项即可。
- 清除锚点:从场景中删除锚点并清除本地存储空间中已保存的文件。这样做的话,您将无法再加载锚点。
- 共享锚点:与连入房间的所有其他用户和加入该房间的新用户共享锚点。
- 对齐锚点:重新对齐头戴设备的坐标系统,使其根据该锚点进行变换。这样一来,当多个用户对齐同一个共享锚点时,就能实现同地。此时您会发现,互联立方体将出现在所有玩家的相同位置。
注意:此场景是
Unity-SharedSpatialAnchors 示例项目的一部分。如要获取该场景,请从 GitHub 克隆或下载示例项目。场景位于示例项目的
Assets/SceneSharing/Scenes/SharedSpatialAnchorsWithScene.unity 内。
- ControlPanel - 用于创建/加载锚点和生成立方体的世界空间用户界面
- PhotonNetworkManager - 网络管理工具,用于进行 Photon 房间管理、玩家同步以及共享锚点编号的分享。
- AlignPlayer - 将锚点位置从世界空间变换为本地空间,并将方向应用到 OVRCameraRig
- OVRCameraRig - 追踪空间以 OVR 相机和手部组件作为子部件
- SceneCaptureController - 管理场景 API 的通话和回电
- WorldGenerationController - 控制场景对象的对象和网格创建
- SpatialAnchorPlacement:锚点放置可视化的放置 Prefab
- SpatialAnchorPrefab:
- SharedAnchor:锚点对齐和共享的界面
- OVRSpatialAnchor:SDK 脚本,可控制定位后的锚点方向。
- PhotonGrabbableObject:管理互联立方体的所有权转移
- PhotonThowableObject:管理互联立方体的所有权转移
- SharedAnchorLoader:管理 SSA API 的 API 通话和回电
- SceneApiSceneCaptureStrategy:管理场景 API 的通话和回电
- 场景:用于存储和共享场景数据的序列化对象(墙壁、书桌、地板等)