Skip to main content

解锁物品

解锁物品世界预览

如何使用 PlayerData 持久化解锁物品,以简单的世界内成就作为演示。

访问解锁物品示例世界 to try it for yourself!

note

在此示例中,术语'物品'是通用用法,并非指此处描述的用户生成物品。

使用示例​

  1. 进入世界
  2. 执行操作解锁成就
    • 在世界中花费时间(10秒、2分钟、5分钟)
    • 移动距离(10单位、100单位、300单位)
    • 重生
    • 找到秘密
    • 完成以上所有
  3. 观察显示已解锁成就的 UI
  4. 离开并返回——您的成就和统计数据(在世界中花费的时间、移动距离)应持久保存

导入示例​

按照以下步骤将此示例添加到您的 Unity 项目:

  1. 从 Unity 编辑器菜单的 "VRChat SDK > 🏠 Example Central" 中打开示例中心窗口
  2. 在列表中找到此预制体,或按标题(与本页标题相同)搜索
  3. 按"导入(Import)"按钮将 Unitypackage 导入到您的项目中

技术解析​

主 UnlockItems 脚本检查本地玩家'的数据首次在 OnPlayerRestored 方法中加载时的成就,并恢复找到的所有已解锁物品。

然后触发 UpdateStats 方法运行,该方法执行以下操作:

  • CheckTimeInWorld() - 检查在世界中的时间
  • CheckDistanceMoved() - 检查移动距离
  • CheckHasPlayerRespawned() - 检查是否重生
  • CheckHasFoundSecret() - 检查是否找到秘密
  • CheckAllAchievementsUnlocked() - 检查是否解锁所有成就

在所有方法运行且成就更新后,该方法会在 UPDATE_STATS_TIME 延迟后再次调用自身。

对于在 UpdateStats 检查期间解锁的每个成就,都会调用 UnlockAchievement 方法,更新目标成就的精灵、颜色和文本。