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

Udonドキュメント

ヒント

Creator Economyへの参加を希望する場合は、申し込みを行ってください!

以下のページは、VRChatのCreator Economyへのアクセス権を持つ販売者のみに関係する内容です。

このページでは、VRChat Creator Economyに関連するすべてのUdon型、メソッド、イベントを解説しています。これらを使用して、Udon Node GraphまたはUdonSharpで独自のUdonスクリプトを作成できます。

VRChat SDKには、顧客が購入できるUdon製品の管理をサポートするオブジェクト型が含まれています。

UdonProduct

UdonProductは、プロジェクト内で作成可能なScriptableObjectです。これはストア内の製品を表しており、Udon内で操作することができます。 ワールドがイベントを受け取るのは、そのワールド内で使用されている製品に基づいた場合のみです。そのため、アップロード前に任意のUdonBehaviourで、その製品に対応するUdonProductを少なくとも一度は参照しておく必要があります。

例えば、UdonProductsをどこでも直接使用しない場合であっても、すべてのUdonBehaviour間でOnPurchaseConfirmedMultiple、OnPurchaseExpired、またはOnPurchasesLoadedイベントを受け取るには、シーン内の少なくとも1つのUdonBehaviourにUdonProductsの配列を持たせる必要があります。

UdonProductは、UdonProductManager(「VRChat SDK」→「UdonProduct Manager」)を使用するか、手動でUdonProductアセットを作成(「Assets」→「Create」→「VRChat」→「UdonProduct」)することで作成できます。

プロジェクトでのUdonProductアセットの作成方法については、Getting Startedをお読みください。

作成直後の空のUdonProduct

フィールド

フィールド名説明
IDstringUdonプロダクトの一意識別子です。VRChatウェブサイト上のストアからコピーして入力してください。
NamestringUdonプロダクトの名前です。
DescriptionstringUdonプロダクトの説明です。

Equals

Description このメソッドは、プロダクトIDが別のプロダクトのIDと一致するかどうかを比較します。

Input

  • IProduct または UdonProduct: このプロダクトと比較する対象のプロダクト。

Output

  • bool: 2つのプロダクトが等しい場合は true、それ以外の場合は false を返します。

IProduct

これは、すべてのUdon Creator Economyのメソッドおよびイベントによって返されるUdonProductと同等のものです。

フィールド名Description
IDstringUdonプロダクトの一意識別子。
NamestringUdonプロダクトの名前。
DescriptionstringUdonプロダクトの説明。
BuyerVRCPlayerAPIこのプロダクトを購入したプレイヤー。

Equals

Description このメソッドは、プロダクトIDが別のプロダクトのIDと一致するかどうかを比較します。

Input

  • IProduct または UdonProduct: このプロダクトと比較する対象のプロダクト。

Output

  • bool: 2つのプロダクトが等しい場合は true、それ以外の場合は false を返します。
注意

UdonProductおよびIProductの「Name」および「Description」フィールドには、現在ワールド内に存在するUdonProductの情報が入力されます。

メソッド

SDKには、プレイヤーの購入やVRChatのストアページとやり取りするためのメソッドが含まれています。これらのメソッドは「Store」名前空間にあります。

Store.DoesPlayerOwnProduct

このメソッドは、プレイヤーが特定の製品を所有しているかどうかを確認します。

Input

  • VRCPlayerApi: 製品の所有状況を確認したいプレイヤー。
  • UdonProductまたはIProduct: 所有状況を確認したい製品。

Output

  • bool: プレイヤーが製品を所有している場合はtrue、そうでない場合はfalse
caution

Udonがプレイヤーの購入情報をまだ受信していない可能性があるため、Startイベントの直後にStore.DoesPlayerOwnProductを使用しないでください。レースコンディションを避けるため、代わりにOnPurchasesLoadedイベントを使用してください。

Store.DoesAnyPlayerOwnProduct

このメソッドは、インスタンス内のいずれかのプレイヤーが特定の製品を所有しているかどうかを確認します。

Input

  • UdonProductまたはIProduct: 所有状況を確認したい製品。

Output

  • bool: インスタンス内のいずれかのプレイヤーがその製品を所有していれば true、そうでなければ false を返します。

Store.GetPlayersWhoOwnProduct

このメソッドは、インスタンス内で特定の製品を所有しているすべてのプレイヤーを取得します。

Input

  • UdonProduct または IProduct: 所有権を確認したい製品。

Output

  • VRCPlayerApi[]: この製品を所有している、インスタンス内のプレイヤーの配列。

Store.OpenWorldStorePage

現在のワールドにワールドストアページがある場合、そのページを開きます。

Store.OpenGroupPage

VRChatのメインメニューで、グループのグループ情報(Group Info)ページを開きます。

Input

  • string: グループのID(例: grp_00000000-0000-0000-0000-000000000000
    • グループIDを確認するには、VRChat.comでそのグループを開き、ブラウザのアドレスバーからIDをコピーしてください。

Store.OpenGroupStorePage

VRChatのメインメニューで、グループのストア(Store)ページを開きます。

Input

  • string: グループのID(例: grp_00000000-0000-0000-0000-000000000000
    • グループIDを確認するには、VRChat.comでグループを開き、ブラウザのアドレスバーからIDをコピーしてください。

Store.OpenListing

VRChatのメインメニューにあるリスティングの購入画面を開きます。

自身のグループストアやワールドストアに追加していない場合でも、有効化されている自身のリスティングであればどれでも開くことができます。

Input

  • string: リスティングのID(例: prod_00000000-0000-0000-0000-000000000000

Store.OpenMarketplaceStore

VRChatメインメニュー内のマーケットプレイスストアのセクションを開きます。オプションとして、そのセクション内のリスティングの詳細ページを直接開くことも可能です。

グループストアやワールドストアの場合、リスティングが含まれているストアに関連付けられたグループIDまたはワールドIDを指定すれば、公開されている任意のリスティングを開くことができます。

Input

  • string: 開きたいマーケットプレイスのセクション。
    • vrchat は「Exclusive」セクションを開きます。
    • avatar は「Avatars」セクションを開きます。
    • world は「World Stores」セクションを開きます。
    • group は「Group Stores」セクションを開きます。
  • string: 開くリスティングのID(例:prod_00000000-0000-0000-0000-000000000000)。空の文字列を指定した場合は、指定したストアセクションのみが開かれます。
  • string (オプション): リスティングのコンテキスト(グループIDまたはワールドID)。グループストアやワールドストア内のリスティングを開く場合にのみ必要です(例:grp_00000000-0000-0000-0000-000000000000 または wrld_00000000-0000-0000-0000-000000000000)。

Store.SendProductEvent

指定したUdonBehaviourを持つインスタンス内のすべてのプレイヤーに対して、OnProductEventイベントを送信します。 ネットワーク経由のイベントを送受信する前に、このメソッドはSendProductEventを使用しているプレイヤーがその製品を購入済みかどうかを確認します。

Input

  • UdonBehaviour: 結果として発生するOnProductEventイベントを受け取るUdon Behaviourです。
  • UdonProduct または IProduct: イベントで使用したい製品です。

Store.ListPurchases

対象プレイヤーが行ったすべての購入内容を含む配列を、指定したUdonBehaviourにOnListPurchasesイベントとして送信します。

Input

  • UdonBehaviour: 結果として発生するOnListPurchasesイベントを受け取るUdon Behaviourです。
  • VRCPlayerApi: 購入済み製品を確認したい対象のプレイヤーです。

Store.ListAvailableProducts

ワールド内で使用されているすべての製品を含む配列を、指定したUdonBehaviourにOnListAvailableProductsイベントとして送信します。

Input

  • UdonBehaviour: 結果として発生する OnListAvailableProducts イベントを受け取る UdonBehaviour です。

Store.ListProductOwners

対象の UdonBehaviour に対して OnListProductOwners イベントを送信します。このイベントを使用すると、すべてのサポーターの名前を取得し、例えばワールド内にユーザー名を表示することができます。

  • このイベントを正しく動作させるには、まず VRChat.com 上の Udon プロダクトに対して 「Owners Names in Udon」設定 を有効にする必要があります。有効にしない場合、OnListProductOwners は発生しません。
  • ワールドをローカルでテストしている場合、OnListProductOwners は実際のユーザー名の代わりにプレースホルダーのユーザー名「VRCat, Fred, VRRat」を読み込みます。
  • GameObject に複数の UdonBehaviour コンポーネントが含まれている場合、このイベントが正しく動作しない可能性があります。

Input

  • UdonBehaviour: 結果として発生する OnListProductOwners イベントを受け取る UdonBehaviour です。
  • UdonProduct: 所有者のユーザー名を取得する対象のUdonProductです。

VRCOpenMenu.OpenAvatarListing

VRChatのメインメニューで、公開されているアバターの詳細/購入画面を開きます。

Input

  • string: アバターのID(例: avtr_00000000-0000-0000-0000-000000000000

イベント

warning

GameObjectやUdonBehaviourを無効にすると、Creator Economyに関連するイベントのほとんどが実行されなくなります。

OnPurchaseConfirmed

このイベントは、プレイヤーの購入情報が読み込まれ、確定した際にトリガーされます。購入情報は以下の状況で読み込まれます。

  • インスタンスに参加したとき(ローカルプレイヤーおよび他のすべてのプレイヤーに対して)
  • 新しいプレイヤーがインスタンスに参加したとき
  • インスタンス内のプレイヤーがワールドの製品を購入したとき

Output

  • IProduct: 購入された製品です。
  • VRCPlayerApi: 製品を購入したプレイヤーです。
  • bool: 購入が直前に行われた場合はtrue、ワールド参加時にプレイヤーの購入履歴を読み込む過程で発生した場合はfalseとなります。

OnPurchaseConfirmedMultiple

このイベントは、プレイヤーの購入情報が読み込まれ、確認された際に1回実行されます。購入情報は以下の状況で読み込まれます:

  • インスタンスに参加したとき(ローカルプレイヤーおよび他のすべてのプレイヤー)
  • 新しいプレイヤーがインスタンスに参加したとき
  • インスタンス内のいずれかのプレイヤーが、そのワールドのプロダクトを購入したとき

Output

  • IProduct: 購入されたプロダクト。
  • VRCPlayerApi: プロダクトを購入したプレイヤー。
  • bool: 購入直後の場合は true、ワールド参加時にプレイヤーの購入情報を読み込んだ結果として発生した場合は false となります。
  • int: ユーザーが購入した数量です。数量購入が有効なインスタント形式の出品の場合、quantity1 から 99 の範囲になります。それ以外のすべての出品タイプでは、quantity は常に 1 です。
注意

OnPurchaseConfirmed は非推奨であり、数量指定購入には対応していません。OnPurchaseConfirmedOnPurchaseConfirmedMultiple を同じスクリプト内で併用しないでください。併用すると、同じ購入を誤って2回検出してしまう可能性があります。

OnPurchaseExpired

このイベントは、インスタンス内にいるプレイヤーが所有する製品のいずれかの有効期限が切れたことをローカルクライアントが検出したときに発生します。

Output

  • IProduct: 有効期限が切れた製品。
  • VRCPlayerApi: 製品の有効期限が切れたプレイヤー。

OnPurchasesLoaded

このイベントは、ローカルプレイヤーがインスタンスに参加した際、または他のプレイヤーが後から参加した際に、プレイヤーのすべての購入情報が読み込まれると発生します。 プレイヤーが製品を1つも所有していない場合でもイベントは発生し、IProduct[] 配列は空になります。

Outputs

  • IProduct[]: プレイヤーが所有する製品の配列。
  • VRCPlayerApi: 購入情報が読み込まれたプレイヤー。

OnProductEvent

このイベントは、プレイヤーが Store.SendProductEvent を使用したときにトリガーされます。ローカルプレイヤーとVRChatのサーバーの両方が、このイベントを実行する前に、そのローカルプレイヤーが製品を購入済みであることを確認します。

Output

  • IProduct: イベントと共に「送信」された製品。
  • VRCPlayerApi: 製品を使用したプレイヤー。

OnListPurchases

このイベントは、ローカルプレイヤーが Store.ListPurchases を使用した時にトリガーされます。ターゲットプレイヤーが行ったすべての購入の配列を返します。

Outputs

  • IProduct[]: ターゲットプレイヤーが所有するプロダクトの配列。
  • VRCPlayerApi: 購入情報が取得されたターゲットプレイヤー。

OnListAvailableProducts

このイベントは、ローカルプレイヤーが Store.ListAvailableProducts を使用したときにトリガーされます。ワールド内で使用されているすべての製品(UdonProduct)の配列を返します。

Outputs

  • IProduct[]: ワールドで使用されているすべての UdonProduct を表す IProduct の配列。

OnListProductOwners

このイベントは、Udonスクリプトが Store.ListProductOwners を呼び出した後にトリガーされます。対象のプロダクトを所有しているすべてのプレイヤーの表示名を含む配列を返します。このリストには、現在のインスタンス内にいるユーザーだけでなく、そのプロダクトを所有するすべてのユーザーが含まれます。

インスタンス内のプレイヤーがUdonプロダクトを所有しているかどうかを確認するには、代わりに Store.DoesPlayerOwnProduct を使用してください。

Outputs

  • IProduct: 最初の Store.ListProductOwners の呼び出しで渡されたプロダクトです。
  • string[]: このプロダクトを所有する全ユーザーの名前を含む文字列の配列です。

最終更新: