Udon 文档
Submit an application if you want to join the Creator Economy!
以下页面仅对有权访问 VRChat 创作者经济的卖家相关。
此页面记录了与 VRChat 创作者经济相关的所有 Udon 类型、方法和事件。您可以使用它们通过 Udon 节点图 或 UdonSharp 创建自己的 Udon 脚本。
类型
VRChat 的 SDK 包含支持管理客户可购买的 Udon 产品的对象类型。
UdonProduct
UdonProduct 是可以在项目中创建的 ScriptableObject。它代表您商店中的产品,允许您在 Udon 中与之交互。
世界只会收到基于其中正在使用的产品的事件,因此在上传之前,有必要在任何 UdonBehaviour 中至少引用一次产品的 UdonProduct 对应项。
例如,即使您没有在任何地方直接使用 UdonProducts,也需要在场景中至少一个 UdonBehaviour 上拥有 UdonProducts 数组,才能在所有 UdonBehaviour 中接收这些产品的 OnPurchaseConfirmedMultiple、OnPurchaseExpired 或 OnPurchasesLoaded 事件。
UdonProducts 可以通过 UdonProductManager("VRChat SDK"→"UdonProduct Manager")或手动创建 UdonProduct 资源("Assets"→"Create"→"VRChat"→"UdonProduct")来创建。
阅读入门指南以了解有关在项目中创建 UdonProduct 资源的更多信息。

字段
| 字段名 | 类型 | 描述 |
|---|---|---|
| ID | string | 您的 Udon 产品的唯一标识符。从 VRChat 网站上的商店复制输入。 |
| Name | string | 您的 Udon 产品的名称。 |
| Description | string | 您的 Udon 产品的描述。 |
Equals
描述 此方法比较产品 ID 是否等于另一个产品的 ID。
输入
IProduct或UdonProduct:要与此产品比较的产品。
输出
bool:如果两个产品相等则为true,否则为false。
IProduct
这是由所有 Udon 创作者经济方法和事件返回的 UdonProduct 的等效对象。
| 字段名 | 类型 | 描述 |
|---|---|---|
| ID | string | Udon 产品的唯一标识符。 |
| Name | string | Udon 产品的名称。 |
| Description | string | Udon 产品的描述。 |
| Buyer | VRCPlayerAPI | 购买此产品的玩家。 |
Equals
描述 此方法比较产品 ID 是否等于另一个产品的 ID。
输入
IProduct或UdonProduct:要与此产品比较的产品。
输出
bool:如果两个产品相等则为true,否则为false。
UdonProduct 和 IProduct 的"Name"和"Description"字段目前由世界中存在的 UdonProduct 填充。
方法
SDK 包含用于与玩家购买或 VRChat 商店页面交互的方法。这些方法可以在"Store"命名空间下找到。
Store.DoesPlayerOwnProduct
此方法检查玩家是否拥有某个产品。
输入
VRCPlayerApi:要检查产品所有权的玩家。UdonProduct或IProduct:要检查所有权的产品。
输出
bool:如果玩家拥有该产品则为true,否则为false。
不要在 Start 事件后立即使用 Store.DoesPlayerOwnProduct,因为 Udon 可能尚未收到玩家的购买信息。为避免竞态条件,请改用 OnPurchasesLoaded 事件。
Store.DoesAnyPlayerOwnProduct
此方法检查实例中是否有任何玩家拥有某个产品。
输入
UdonProduct或IProduct:要检查所有权的产品。
输出
bool:如果实例中有任何玩家拥有该产品则为true,否则为false。
Store.GetPlayersWhoOwnProduct
此方法获取实例中拥有某个产品的所有玩家。
输入
UdonProduct或IProduct:要检查所有权的产品。
输出
VRCPlayerApi[]:实例中拥有此产品的玩家数组。
Store.OpenWorldStorePage
打开当前世界的世界商店页面(如果有)。
Store.OpenGroupPage
在 VRChat 主菜单中打开群组的群组信息页面。
输入
string:群组的 ID(例如grp_00000000-0000-0000-0000-000000000000)- 要查找群组 ID,请在 VRChat.com 上打开该群组并从浏览器地址栏复制 ID。
Store.OpenGroupStorePage
在 VRChat 主菜单中打开群组的商店页面。
输入
string:群组的 ID(例如grp_00000000-0000-0000-0000-000000000000)- 要查找群组 ID,请在 VRChat.com 上打开该群组并从浏览器地址栏复制 ID。
Store.OpenListing
在 VRChat 主菜单中打开商品的购买界面。
你可以打开任何已激活的商品,即使你没有将其添加到群组商店或世界商店。
输入
string:商品的 ID(例如prod_00000000-0000-0000-0000-000000000000)
Store.OpenMarketplaceStore
在 VRChat 主菜单中打开市场商店的某个部分,可选地打开该部分中的商品详情页面。
对于群组或世界商店,如果你还指定了包含商品任何商店的群组 ID 或世界 ID,则可以打开任何已发布的商品。
输入
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 的玩家是否已购买该产品。
输入
UdonBehaviour:将接收 OnProductEvent 事件的 Udon Behaviour。UdonProduct或IProduct:要用于事件的产品。
Store.ListPurchases
向目标 UdonBehaviour 发送 OnListPurchases 事件,包含目标玩家的所有购买数组。
输入
UdonBehaviour:将接收 OnListPurchases 事件的 Udon Behaviour。VRCPlayerApi:要检查购买产品的玩家。
Store.ListAvailableProducts
向目标 UdonBehaviour 发送 OnListAvailableProducts 事件,包含世界中使用的所有产品的数组。
输入
UdonBehaviour:将接收 OnListAvailableProducts 事件的 UdonBehaviour。
Store.ListProductOwners
向目标 UdonBehaviour 发送 OnListProductOwners 事件。此事件允许你检索所有支持者的名称,例如,在你的世界中显示他们的用户名。
- 要使此事件正常工作,你需要先在 VRChat.com 上为 Udon 产品启用"Udon 中的所有者名称"设置。否则,OnListProductOwners 将不会触发。
- 如果你在本地测试世界,OnListProductOwners 将加载 占位用户名"VRCat, Fred, VRRat"而不是真实用户名。
- 如果你的 GameObject 包含多个 UdonBehaviour 组件,此事件可能无法正常工作。
输入
UdonBehaviour:将接收 OnListProductOwners 事件的 UdonBehaviour。UdonProduct:要检索所有者用户名的 UdonProduct。
VRCOpenMenu.OpenAvatarListing
在 VRChat 主菜单中打开已发布化身的详情/购买界面。
输入
string:化身的 ID(例如avtr_00000000-0000-0000-0000-000000000000)
事件
如果你禁用 GameObject 或 UdonBehaviour,它们将不会执行大多数与创作者经济相关的事件。
OnPurchaseConfirmed
当玩家的购买已加载并确认时触发此事件。在以下情况下加载购买:
- 加入实例时,对本地玩家和其他玩家都执行,
- 任何新玩家加入实例时,
- 当实例中的任何玩家购买了世界的产品之一时。
输出
IProduct:已购买的产品。VRCPlayerApi:已购买产品的玩家。bool:如果刚完成购买则为true,如果是作为加入世界时加载玩家购买的一部分则为false。
OnPurchaseConfirmedMultiple
当玩家的购买已加载并确认时触发此事件。在以下情况下加载购买:
- 加入实例时,对本地玩家和其他玩家都执行
- 任何新玩家加入实例时
- 实例中的任何玩家购买了世界的产品之一时
输出
IProduct:已购买的产品。VRCPlayerApi:已购买产品的玩家。bool:如果刚完成购买则为true,如果是作为加入世界时加载玩家购买的一部分则为false。int:用户购买的数量。对于启用了数量购买的即时商品,quantity范围为1到99。对于所有其他商品类型,quantity始终为1。
OnPurchaseConfirmed 已弃用,不支持数量购买。切勿在同一脚本中同时使用 OnPurchaseConfirmed 和 OnPurchaseConfirmedMultiple——否则可能意外两次检测到同一购买。
OnPurchaseExpired
当本地客户端检测到实例中玩家拥有的某个产品已过期时触发此事件。
输出
IProduct:已过期的产品。VRCPlayerApi:产品已过期的玩家。
OnPurchasesLoaded
当玩家的所有购买已加载时触发此事件,无论是在本地玩家加入实例时还是其他玩家后来加入时。 如果玩家没有拥有任何产品,事件仍会触发,IProduct[] 数组将为空。