Skip to main content

网络 ID 工具

网络 ID 是用于确定在网络中哪个对象是哪个的标识符。在大多数情况下,您无需担心这个问题,但在处理跨平台世界时可能会遇到,因为玩家实际上加载的是世界的两个不同版本。

网络 ID 是这些不同版本之间的链接,以确保每个人看到的是相同的内容,并且数据被传输到正确的对象。

更具体地说,网络 ID 只是分配给 GameObject 的一个编号。例如,假设一个沙滩球的 ID 为 1,一个冰淇淋蛋筒的 ID 为 2。如果它们混淆了,您可能试图踢沙滩球,而其他人看到的是您在踢冰淇淋!

为了处理这些潜在问题并确保不同场景同步,我们创建了一个网络 ID 工具。

网络 ID 导入和导出工具​

此工具允许您在场景或项目之间保存和传输网络 ID。可以在 Unity 编辑器的 VRChat SDK/Utilities/Network ID Import and Export Utility 下找到。

note

仅当您开发跨平台世界且不同版本位于不同场景或项目中时才需要使用此工具。

network-id-utility-image1.png

使用此工具时,你将看到整个场景中所有网络 ID 的列表。如果还没有,可以单击 Regenerate Scene IDs。

network-id-utility-image4.png

当你准备将网络 ID 从一个场景转移到另一个场景时,单击 Export 按钮将文件保存到某个位置。然后转到另一个场景并单击 Import,选择该文件。

该工具会导出每个对象网络 ID 的场景层级路径。例如:{"10":"/CubePickup", "11":"/Prefabs/SyncedPen"}。

当你将网络 ID 导入场景时,请确保每个网络对象的路径相同。非网络对象无关紧要,它们可以不同,只要不与需要同步的内容冲突即可。

warning

不要在网络游戏对象的名称中使用正斜杠 /。游戏对象路径使用正斜杠作为分隔符,因此避免使用它们以防止意外行为。

network-id-utility-image5.png

如果两个场景之间一切匹配,你应该看到一个带有 Accept All 按钮的大块。点击它,就完成了!

解决冲突​

此实用程序中有多个冲突解决工具。要扫描冲突,请按 Scan For Conflicts 按钮,或勾选 Auto Scan 以在场景中工作时持续扫描。

network-id-utility-image3.png

这是一个存在于文件中但不在场景中的对象的示例。文件说此路径有一个网络 ID,但找不到具有该路径的对象。此时,你可以选择忽略它或指定一个不同的对象。如果你确定这是一个不需要在此场景中存在的对象,那么你可以安全地忽略它。但是,如果它应该存在于场景中但名称不同,那么你可以选择它。解决此冲突后,它将移动到可以接受网络 ID 的部分。

network-id-utility-image2.png

再举一个例子:某个对象显示其网络 ID 为 20,但文件却指出另一个不同的路径应该拥有 ID 20。

这种情况以及许多其他奇怪的情况,只有在场景中已存在网络 ID 的情况下,又尝试导入新文件时才会发生。如果你正在在不同场景之间复制 ID,那么你很可能希望在导入前先清除 ID,以避免此问题。不过,这些选项确实存在,以备你需要执行某些非常特定的操作,例如尝试修复场景而不破坏一些现有网络 ID。

如果你需要解决这些冲突,可以选择单击"全部忽略"按钮,这不会对场景做任何修改;也可以手动选择哪个对象获得该 ID。当你单击"选择"按钮时,会通过将该 ID 应用到你选中的对象来解决冲突。此操作可以解决一个或多个冲突,所以当你只解决其中一个却发现许多冲突随之消失时,不必感到惊讶。