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をお読みください。

フィールド
| フィールド名 | 型 | 説明 |
|---|---|---|
ID | string | Udonプロダクトの一意識別子です。VRChatウェブサイト上のストアからコピーして入力してください。 |
| Name | string | Udonプロダクトの名前です。 |
| Description | string | Udonプロダクトの説明です。 |
Equals
Description このメソッドは、プロダクトIDが別のプロダクトのIDと一致するかどうかを比較します。
Input
IProductまたはUdonProduct: このプロダクトと比較する対象のプロダクト。
Output
bool: 2つのプロダクトが等しい場合はtrue、それ以外の場合はfalseを返します。
IProduct
これは、すべてのUdon Creator Economyのメソッドおよびイベントによって返されるUdonProductと同等のものです。
| フィールド名 | 型 | Description |
|---|---|---|
ID | string | Udonプロダクトの一意識別子。 |
| Name | string | Udonプロダクトの名前。 |
| Description | string | Udonプロダクトの説明。 |
Buyer | VRCPlayerAPI | このプロダクトを購入したプレイヤー。 |
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。
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)
イベント
GameObjectやUdonBehaviourを無効にすると、Creator Economyに関連するイベントのほとんどが実行されなくなります。
OnPurchaseConfirmed
このイベントは、プレイヤーの購入情報が読み込まれ、確定した際にトリガーされます。購入情報は以下の状況で読み込まれます。
- インスタンスに参加したとき(ローカルプレイヤーおよび他のすべてのプレイヤーに対して)
- 新しいプレイヤーがインスタンスに参加したとき
- インスタンス内のプレイヤーがワールドの製品を購入したとき
Output
IProduct: 購入された製品です。VRCPlayerApi: 製品を購入したプレイヤーです。bool: 購入が直前に行われた場合はtrue、ワールド参加時にプレイヤーの購入履歴を読み込む過程で発生した場合はfalseとなります。
OnPurchaseConfirmedMultiple
このイベントは、プレイヤーの購入情報が読み込まれ、確認された際に1回実行されます。購入情報は以下の状況で読み込まれます:
- インスタンスに参加したとき(ローカルプレイヤーおよび他のすべてのプレイヤー)
- 新しいプレイヤーがインスタンスに参加したとき
- インスタンス内のいずれかのプレイヤーが、そのワールドのプロダクトを購入したとき
Output
IProduct: 購入されたプロダクト。VRCPlayerApi: プロダクトを購入したプレイヤー。bool: 購入直後の場合はtrue、ワールド参加時にプレイヤーの購入情報を読み込んだ結果として発生した場合はfalseとなります。int: ユーザーが購入した数量です。数量購入が有効なインスタント形式の出品の場合、quantityは1から99の範囲になります。それ以外のすべての出品タイプでは、quantityは常に1です。
OnPurchaseConfirmed は非推奨であり、数量指定購入には対応していません。OnPurchaseConfirmed と OnPurchaseConfirmedMultiple を同じスクリプト内で併用しないでください。併用すると、同じ購入を誤って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[]: このプロダクトを所有する全ユーザーの名前を含む文字列の配列です。
最終更新: