Skip to main content

Udon 文档

tip

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 资源的更多信息。

创建后的空白 UdonProduct

字段​

字段名类型描述
IDstring您的 Udon 产品的唯一标识符。从 VRChat 网站上的商店复制输入。
Namestring您的 Udon 产品的名称。
Descriptionstring您的 Udon 产品的描述。

Equals​

描述 此方法比较产品 ID 是否等于另一个产品的 ID。

输入

  • IProduct 或 UdonProduct:要与此产品比较的产品。

输出

  • bool:如果两个产品相等则为 true,否则为 false。

IProduct​

这是由所有 Udon 创作者经济方法和事件返回的 UdonProduct 的等效对象。

字段名类型描述
IDstringUdon 产品的唯一标识符。
NamestringUdon 产品的名称。
DescriptionstringUdon 产品的描述。
BuyerVRCPlayerAPI购买此产品的玩家。

Equals​

描述 此方法比较产品 ID 是否等于另一个产品的 ID。

输入

  • IProduct 或 UdonProduct:要与此产品比较的产品。

输出

  • bool:如果两个产品相等则为 true,否则为 false。
note

UdonProduct 和 IProduct 的"Name"和"Description"字段目前由世界中存在的 UdonProduct 填充。

方法​

SDK 包含用于与玩家购买或 VRChat 商店页面交互的方法。这些方法可以在"Store"命名空间下找到。

Store.DoesPlayerOwnProduct​

此方法检查玩家是否拥有某个产品。

输入

  • VRCPlayerApi:要检查产品所有权的玩家。
  • UdonProduct 或 IProduct:要检查所有权的产品。

输出

  • bool:如果玩家拥有该产品则为 true,否则为 false。
caution

不要在 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 事件,包含世界中使用的所有产品的数组。

输入

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)

事件​

warning

如果你禁用 GameObject 或 UdonBehaviour,它们将不会执行大多数与创作者经济相关的事件。

OnPurchaseConfirmed​

当玩家的购买已加载并确认时触发此事件。在以下情况下加载购买:

  • 加入实例时,对本地玩家和其他玩家都执行,
  • 任何新玩家加入实例时,
  • 当实例中的任何玩家购买了世界的产品之一时。

输出

  • IProduct:已购买的产品。
  • VRCPlayerApi:已购买产品的玩家。
  • bool:如果刚完成购买则为 true,如果是作为加入世界时加载玩家购买的一部分则为 false。

OnPurchaseConfirmedMultiple​

当玩家的购买已加载并确认时触发此事件。在以下情况下加载购买:

  • 加入实例时,对本地玩家和其他玩家都执行
  • 任何新玩家加入实例时
  • 实例中的任何玩家购买了世界的产品之一时

输出

  • IProduct:已购买的产品。
  • VRCPlayerApi:已购买产品的玩家。
  • bool:如果刚完成购买则为 true,如果是作为加入世界时加载玩家购买的一部分则为 false。
  • int:用户购买的数量。对于启用了数量购买的即时商品,quantity 范围为 1 到 99。对于所有其他商品类型,quantity 始终为 1。
caution

OnPurchaseConfirmed 已弃用,不支持数量购买。切勿在同一脚本中同时使用 OnPurchaseConfirmed 和 OnPurchaseConfirmedMultiple——否则可能意外两次检测到同一购买。

OnPurchaseExpired​

当本地客户端检测到实例中玩家拥有的某个产品已过期时触发此事件。

输出

  • IProduct:已过期的产品。
  • VRCPlayerApi:产品已过期的玩家。

OnPurchasesLoaded​

当玩家的所有购买已加载时触发此事件,无论是在本地玩家加入实例时还是其他玩家后来加入时。 如果玩家没有拥有任何产品,事件仍会触发,IProduct[] 数组将为空。

输出

  • IProduct[]:玩家拥有的产品数组。
  • VRCPlayerApi:其购买已加载的玩家。

OnProductEvent​

当玩家使用 Store.SendProductEvent 时触发此事件。本地玩家和 VRChat 服务器都会在执行此事件前检查本地玩家是否已购买该产品。

输出

  • IProduct:伴随事件"发送"的产品。
  • VRCPlayerApi:使用了其产品的玩家。

OnListPurchases​

当本地玩家使用 Store.ListPurchases 时触发此事件。它返回目标玩家进行的所有购买的数组。

输出

  • IProduct[]:目标玩家拥有的产品数组。
  • VRCPlayerApi:其购买已被检索的目标玩家。

OnListAvailableProducts​

当本地玩家使用 Store.ListAvailableProducts 时触发此事件。它返回世界中使用的所有产品(UdonProduct)的数组。

输出

  • IProduct[]:表示世界中使用的所有 UdonProduct 的 IProduct 数组。

OnListProductOwners​

此事件在 Udon 脚本调用 Store.ListProductOwners 后触发。它返回一个包含所有拥有目标产品的玩家显示名称的数组。列表包含每位拥有该产品的用户,而不仅是当前实例中的用户。

要检查实例中是否有玩家拥有 Udon 产品,应改用 Store.DoesPlayerOwnProduct。

输出

  • IProduct:在初始 Store.ListProductOwners 调用中传入的产品。
  • string[]:包含拥有此产品的所有用户名称的字符串数组。