特殊同步组件:VRC持久化组件和VRCPlayerObject
VRChat拥有三个特殊的同步组件。
1:VRCPlayerObject——玩家物体模板
PlayerObjects会自动为加入你世界的每位玩家提供一个GameObject的副本,并且限定所有者。
每位玩家都会拥有属于自己的PlayerObjects,这些脚本将会使用Udon保留的NetWorkingIDS,不用担心会出现同步问题。
这些PlayerObjects无法转移所有权,但是依然可以正常触发,所以可以使用带参网络同步来单向与Owner通信。
2:VRCEnablePersistence——启用持久化
挂载了这个脚本的物体的同步变量的值将会被VRChat记录,并且在下一次进入游戏时恢复。如果组件包含VRCSyncObject,则也会同步变换(transform)和刚体组件 (Rigidbody)。
官方推荐VRCEnablePersistence配合VRCPlayerObject使用,后续我也会介绍几种不同的持久化方案。
3:PlayerData——玩家数据库
这个是一个独立的系统,使用键值对来存储信息,所有存入到玩家数据库的信息都会被同步给所有玩家。
PlayerData通过变量同步通道进行同步,类似于手动同步,但是拥有特殊的同步事件。
所有的脚本都可以正常访问和修改PlayerData的值。
玩家数据库的恢复和游戏的开始是不同步的,你需要通过特别的事件来等待恢复完成。
PlayerData有以下事件:
OnPlayerDataUpdated()玩家数据更新,可设置为仅本地或者所有玩家。
OnPlayerRestored() 玩家数据载入/恢复完成
官方提示:
在使用持久性时,请考虑以下限制:
- 每个世界在VRChat服务器上每位玩家可存储100千字节(KB)的PlayerData和100KB的PlayerObject数据。
- VRChat 以压缩格式存储用户数据。如果你的世界数据易于压缩,你可能能存储超过300 KB(由VRChat压缩成100 KB)。
- 你不能保存会导致你超过这个限制的数据。相反,VRChat会记录错误,你的数据不会被保存。减少数据大小以避免这种情况。
- 本地玩家的用户数据必须在他们离开世界前保存。持久数据无法保存在本地玩家的OnPlayerLeft事件中。
- 持久数据不能在不同世界之间共享。
- 持久化系统内置了“存档槽”功能。不过,世界创作者可以用乌冬面在他们的世界中构建存档槽系统。
No comments to display
No comments to display