Skip to main content

持久化

什么是持久化?​

持久化允许世界保存高分、库存、玩家最后位置、货币、解锁项、偏好设置等更多内容。当玩家离开世界后返回时,Udon 可以访问他们保存的数据。

这些数据存储在 VRChat 的服务器上,可在所有平台和同一世界的所有实例中访问。它与用户的账户关联,因此即使玩家在完全不同的设备上访问世界,Udon 仍然可以访问该世界的数据。

使用持久化的主要方式之一是使用 PlayerData。PlayerData 是一个与每个玩家关联的键值存储系统。任何脚本都可以访问这些数据,它能够存储所有整数类型、浮点数、双精度浮点数、向量、颜色、字符串和字节数组。

持久化还包括 PlayerObject。任何带有此组件的游戏对象都会自动为每个玩家实例化。Udon 脚本可以附加到 PlayerObject 上,如果添加了 VRCEnablePersistence 组件,这些对象上的所有同步数据都将持久化。PlayerObject 在持久化之外还有许多用途,类似于每个玩家的对象池。它们可用于任何应该与实例中每个玩家绑定的内容,例如生命条、战斗系统的碰撞器,以及无需所有权转移的健壮网络系统。

持久化使用示例​

浏览我们的持久化示例,在 Unity 中尝试持久化。所有示例都可以在示例中心找到。

持久用户数据​

通过持久化保存的数据称为"用户数据"。持久化有两种 Udon 可以从 VRChat 服务器保存和加载的用户数据类型:

  • PlayerData 是一个键值数据库,允许 Udon 脚本保存和加载用户数据。
  • PlayerObject 是为每个玩家自动实例化的 GameObject。它们所有同步的 Udon 变量都可以持久化,如果标记了 VRCEnablePersistence 组件。

不同环境中的数据存储​

如果在开发期间测试世界,用户数据存储在不同的位置:

  • 已上传的世界:
    • 持久数据存储在 VRChat 服务器上,与你的账户关联。你可以在任何设备上访问你的世界,数据将可用。
    • 如果你同时在同一世界中多次打开 VRChat(同一账户),可能会引起冲突并意外覆盖自己的数据。
  • 本地测试世界
    • 如果你"Build & Test",用户数据存储在本地。
      • 启动测试客户端时,它没有用户数据。
      • 当你重新加入或"Build & Reload"时,用户数据不会重置。
      • 关闭测试客户端时,它会删除用户数据。
    • 如果你将"客户端数量"设置为两个或更多,每个测试客户端的用户数据分开存储。
  • ClientSim

限制​

在世界中使用持久化时,请考虑以下限制:

  • 每个世界在 VRChat 服务器上每个玩家可以存储 100 KB 的 PlayerData 和 100 KB 的 PlayerObject 数据。
    • VRChat 以压缩格式存储用户数据。如果你的世界数据易于压缩,你可能能够存储超过 300 KB(由 VRChat 压缩为 100 KB)的数据。
    • 你不能保存会导致超出此限制的数据。否则,VRChat 会记录错误,你的数据将不会被保存。减小数据大小以避免此问题。
  • 本地玩家的用户数据必须在他们离开世界之前保存。持久数据不能在本地玩家的 OnPlayerLeft 事件中保存。
  • 不同世界之间不能共享持久数据。
  • 持久化没有内置"存档位"功能。然而,世界创建者可以使用 Udon 在其世界中构建存档位系统。

制作持久化预制体​

在构建具有持久化行为的预制体时,重要的是要考虑它们如何与创作者项目中的其他预制体交互。

首先,考虑使用 PlayerObjects 而不是 PlayerData,这对_大多数_预制体更合适。PlayerObjects 很好地包含在预制体的层级结构中,更适合持久化大量数据和/或频繁变化的数据。请记住,当你更改本地玩家的任何 PlayerData 时,所有他们的 PlayerData 都会被发送,包括未更改的数据。世界中使用 PlayerData 的每个预制体都会增加此集合,并且每次都需要发送,这会迅速扩大世界中的网络使用量,可能导致带宽问题。

如果 PlayerData 对于你预制体的某些数据_仍然_是更好的选择,请考虑为你预制体使用的所有键添加前缀。例如,Momo 的持久化后处理设置可以选择前缀"Momo-PPP-",然后使用以下键:

  • Momo-PPP-BloomAmount
  • Momo-PPP-Vignette
  • Momo-PPP-Weight

这种方法将大大减少与其他预制体名称冲突的可能性。例如,上面的"Weight"键很容易出现问题,如果你有两个具有"Weight"参数的不同预制体,但另一个预制体不太可能使用"Momo-PPP"作为其前缀。

重置用户数据​

danger

这是不可逆的!删除后无法恢复你的用户数据。

你可以删除自己的持久化用户数据。这允许你(或你的玩家)"重新开始"或解决技术问题。

有几种方法可以重置用户数据,既可以在 VRChat 中,也可以在我们的网站上。

在 VRChat 中​

在 VRChat 中重置用户数据是最简单的选项。

特定世界​

你可以按照以下步骤删除任何世界的用户数据:

  1. 在 VRChat 主菜单中选择一个世界。
  2. 向下滚动到"Actions"部分。
  3. 选择"Reset User Data"。
    • 只有当你对此世界有用户数据时,此按钮才会出现。
  4. 选择"YES, RESET"。

如果你当前在持久化世界中,可能需要离开或重新加入世界才能重置用户数据。

所有世界​

你也可以按照以下步骤删除你访问过的所有世界的用户数据:

  1. 在 VRChat 主菜单中打开设置。
  2. 选择"Debug"部分。
  3. 向下滚动到"User Data"部分。
  4. 选择"Reset All User Data"。
  5. 选择"YES, RESET."(是,重置。)

在 VRChat 网站上​

你可以在 VRChat 网站上重置用户数据。请确保你有一个 VRChat 帐户。如果你只有 Meta、Pico 或 Viveport 帐户,必须首先将其关联到 VRChat 帐户。

特定世界​

你可以按照以下步骤重置特定世界的用户数据:

  1. 打开 VRChat.com 上的某个世界。
  2. 向下滚动到"User Data"部分。
    • 如果你没有该世界的用户数据,此部分将不存在。
  3. 点击 Reset User Data(重置用户数据)。
  4. 阅读警告后,点击 Yes(是)确认。

所有世界​

你可以通过访问 VRChat 网站来重置所有访问过的世界的用户数据:

  1. 打开 VRChat.com 上的设置页面。
  2. 向下滚动到 Persistent Data(持久化数据)部分。
  3. 点击 Reset All User Data(重置所有用户数据)。
  4. 阅读警告后,点击 Yes(是)确认。