Persistence
Persistenceとは?
Persistence(永続化)機能を使用すると、ワールド内でハイスコア、所持品、プレイヤーの最終位置、通貨、アンロック状況、各種設定などを保存できます。プレイヤーがワールドから退出して後で戻ってきた際、Udonから保存されたデータにアクセスすることが可能です。
このデータはVRChatのサーバーに保存され、すべてのプラットフォームおよび同じワールドのすべてのインスタンスからアクセスできます。データはユーザーのアカウントに紐付いているため、プレイヤーが全く別のデバイスからワールドを訪れた場合でも、Udonは引き続きそのワールドのデータにアクセスできます。
Persistenceを利用する主な方法の一つに、PlayerDataがあります。PlayerDataは、各プレイヤーに関連付けられたキー・値(Key-Value)形式のストレージシステムです。anyスクリプトからこのデータにアクセスでき、all整数型、float型、double型、ベクトル型、色(Color)型、文字列型、およびバイト配列を保存可能です。
永続化にはPlayerObjectsも含まれます。このコンポーネントを持つゲームオブジェクトは、プレイヤーごとに自動的にインスタンス化されます。UdonスクリプトをPlayerObjectsにアタッチし、そこにVRCEnablePersistenceコンポーネントを追加すると、そのオブジェクト上のall同期データが永続化されます。PlayerObjectsには永続化以外にも多くの用途があり、プレイヤーごとのオブジェクトプールと同様のユースケースで機能します。ヘルスバーや戦闘システムのコライダー、所有権の移譲を必要としない堅牢なネットワークシステムなど、インスタンス内の各プレイヤーに紐付けるべきanyものに使用できます。
永続化(Persistence)の使用例
Unityで永続化を試すには、永続化のサンプルをご覧ください。すべてのサンプルはExample Centralから利用可能です。
ユーザーデータの永続化
永続化によって保存されたデータは「ユーザーデータ」と呼ばれます。永続化には、UdonがVRChatのサーバーに対して読み書きできる2種類のユーザーデータが存在します。
- PlayerData は、Udonスクリプトでユーザーデータを保存および読み込み可能にするキー・バリュー形式のデータベースです。
- PlayerObject は、各プレイヤーに対して自動的にインスタンス化されるGameObjectです。PlayerObject に含まれる同期されたUdon変数は、
VRCEnablePersistenceコンポーネントがアタッチされていれば永続化されます。
各環境におけるデータストレージ
開発中にワールドをテストする場合、ユーザーデータは以下の場所に保存されます:
- アップロード済みのワールド:
- 永続データは、ユーザーのアカウントに紐づくVRChatのサーバーに保存されます。どのデバイスからワールドにアクセスしてもデータを利用可能です。
- 同じアカウントで同じワールドを同時に複数回開くと、競合が発生し、意図せず自身のデータを上書きしてしまう可能性があります。
- Local Test World
- Build & Test を使用する場合、User Dataはローカルに保存されます。
- テストクライアントを起動した際は、User Dataがない状態で始まります。
- 再参加または Build & Reload を行った場合、User Dataは not リセットされません。
- テストクライアントを閉じると、そのUser Dataは削除されます。
- Number of Clients を2以上に設定した場合、User Dataは各テストクライアントごとに個別に保存されます。
- Build & Test を使用する場合、User Dataはローカルに保存されます。
- ClientSim
- Persistent dataはプロジェクト内のJSONファイルに保存されます
- 詳細はClientSim Persistenceのドキュメントを参照してください。
制限事項
ワールドで永続化機能を使用する際は、以下の制限事項を考慮してください:
- 各ワールドは、VRChatのサーバー上でプレイヤー1人あたり100キロバイト(KB)のUser Dataを保存できます。
- VRChatはUser Dataを圧縮形式で保存します。ワールドのデータが圧縮しやすいものであれば、300 KB以上のデータを保存できる可能性があります(VRChatによって100 KBに圧縮されるため)。
- この制限を超えるデータを保存することはできません。制限を超えた場合、VRChatはエラーを記録し、データは保存されません。これを避けるためにデータサイズを削減してください。
- ローカルプレイヤーのUser Dataは、ワールドから退出する前に保存する必要があります。「永続データ(Persistent data)」をローカルプレイヤーのOnPlayerLeftイベント内で保存することはできません。
- 「永続データ(Persistent data)」を異なるワールド間で共有することはできません。
- Persistenceには「セーブスロット」の機能が組み込まれていません。しかし、ワールド制作者はUdonを使用して、ワールド内に独自のセーブスロットシステムを構築できます。
Persistent Prefabの作成
Persistentな挙動を持つPrefabを作成する際は、それらがクリエイターのプロジェクト内の他のPrefabとどのように相互作用するかを考慮することが重要です。
まず、ほとんどのプレハブに適した選択肢であるPlayerDataではなく、PlayerObjectsの使用を検討してください。PlayerObjectsはプレハブの階層内にきれいに収められており、大量のデータや頻繁に変更されるデータを永続化するのに適しています。ローカルプレイヤーのany PlayerDataを変更すると、変更されていないデータを含め、そのプレイヤーのall PlayerDataが送信されることに注意してください。ワールド内でPlayerDataを使用するすべてのプレハブがこのコレクションに追加され、そのたびに送信が必要となるため、ワールドのネットワーク使用量が急速に増大し、帯域幅の問題を引き起こす可能性があります。
もしPlayerDataの方がプレハブの一部のデータを保持するのに適している場合は、プレハブで使用するすべてのキーにプレフィックスを追加することを検討してください。例えば、MomoのPersistent Post-Processing設定であれば、"Momo-PPP-"というプレフィックスを選択し、以下のようなキーを使用します:
- Momo-PPP-BloomAmount
- Momo-PPP-Vignette
- Momo-PPP-Weight
この手法をとることで、他のPrefabと名前が衝突する可能性を大幅に減らすことができます。例えば、上記のWeightというキーは、2つの異なるPrefabが両方ともWeightパラメータを持っていると簡単に問題が発生してしまいますが、他のPrefabがMomo-PPPをプレフィックスとして使用する可能性は非常に低いでしょう。
Reset User Data
これは取り消し不可能な操作です!削除したユーザーデータを復元することはできません。
自分の永続的なユーザーデータを削除できます。これにより、あなた(またはプレイヤー)は「最初からやり直す」ことや、技術的な問題を解決することが可能になります。
ユーザーデータをリセットする方法は、VRChat内および弊社ウェブサイト上の両方に複数存在します。
VRChat内で
VRChat内でユーザーデータをリセットするのが最も簡単な方法です。
特定のワールド
以下の手順に従って、任意のワールドのUser Dataを削除できます:
- VRChatのメインメニューでワールドを選択します。
- 下にスクロールして「Actions」セクションを表示します。
- 「Reset User Data」を選択します。
- このボタンは、そのワールドのUser Dataが存在する場合にのみ表示されます。
- 「YES, RESET」を選択します。
現在永続的なワールドにいる場合は、ユーザーデータをリセットする前に、そのワールドから退出するか、再入室する必要があるかもしれません。
すべてのワールド
以下の手順に従って、訪れたすべてのワールドのユーザーデータを削除することもできます:
- VRChatのメインメニューから設定(Settings)を開きます。
- 「Debug」セクションを選択します。
- 「User Data」セクションまでスクロールします。
- 「Reset All User Data」を選択します。
- 「YES, RESET.」を選択します。
VRChatウェブサイトで
VRChatウェブサイト上でUser Dataをリセットできます。VRChatアカウントを持っていることを確認してください。Meta、Pico、またはViveportアカウントのみをお持ちの場合は、先にVRChatアカウントへの連携が必要です。
特定のワールド
以下の手順に従って、特定のワールドに対する自身のUser Dataをリセットできます:
- VRChat.comでワールドページを開きます。
- 「User Data」セクションまでスクロールします。
- そのワールドのUser Dataが存在しない場合、このセクションは表示されません。
- Reset User Dataをクリックします。
- 警告を読んだ後、Yesをクリックして確定します。
すべてのワールド
VRChatのウェブサイトにアクセスすることで、訪れたすべてのワールドにおける自身のUser Dataをリセットできます:
- VRChat.comの設定ページを開きます。
- 下にスクロールしてPersistent Dataセクションを表示します。
- Reset All User Dataをクリックします。
- 警告を読んだ後、Yesをクリックして確定します。
最終更新: