VRChat 非公式日本語ドキュメント

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は各テストクライアントごとに個別に保存されます。
  • ClientSim

制限事項

ワールドで永続化機能を使用する際は、以下の制限事項を考慮してください:

  • 各ワールドは、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

danger

これは取り消し不可能な操作です!削除したユーザーデータを復元することはできません。

自分の永続的なユーザーデータを削除できます。これにより、あなた(またはプレイヤー)は「最初からやり直す」ことや、技術的な問題を解決することが可能になります。

ユーザーデータをリセットする方法は、VRChat内および弊社ウェブサイト上の両方に複数存在します。

VRChat内で

VRChat内でユーザーデータをリセットするのが最も簡単な方法です。

特定のワールド

以下の手順に従って、任意のワールドのUser Dataを削除できます:

  1. VRChatのメインメニューでワールドを選択します。
  2. 下にスクロールして「Actions」セクションを表示します。
  3. 「Reset User Data」を選択します。
    • このボタンは、そのワールドのUser Dataが存在する場合にのみ表示されます。
  4. 「YES, RESET」を選択します。

現在永続的なワールドにいる場合は、ユーザーデータをリセットする前に、そのワールドから退出するか、再入室する必要があるかもしれません。

すべてのワールド

以下の手順に従って、訪れたすべてのワールドのユーザーデータを削除することもできます:

  1. VRChatのメインメニューから設定(Settings)を開きます。
  2. 「Debug」セクションを選択します。
  3. 「User Data」セクションまでスクロールします。
  4. 「Reset All User Data」を選択します。
  5. 「YES, RESET.」を選択します。

VRChatウェブサイトで

VRChatウェブサイト上でUser Dataをリセットできます。VRChatアカウントを持っていることを確認してください。Meta、Pico、またはViveportアカウントのみをお持ちの場合は、先にVRChatアカウントへの連携が必要です。

特定のワールド

以下の手順に従って、特定のワールドに対する自身のUser Dataをリセットできます:

  1. VRChat.comでワールドページを開きます。
  2. 「User Data」セクションまでスクロールします。
    • そのワールドのUser Dataが存在しない場合、このセクションは表示されません。
  3. Reset User Dataをクリックします。
  4. 警告を読んだ後、Yesをクリックして確定します。

すべてのワールド

VRChatのウェブサイトにアクセスすることで、訪れたすべてのワールドにおける自身のUser Dataをリセットできます:

  1. VRChat.comの設定ページを開きます。
  2. 下にスクロールしてPersistent Dataセクションを表示します。
  3. Reset All User Dataをクリックします。
  4. 警告を読んだ後、Yesをクリックして確定します。

最終更新: