区域定价

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

通过管理定价,您可以为您的商品提供特定区域的价格,并构建一个更加包容和易于接入的全球经济。在确定商品的默认全球价格后,Roblox 会利用多种信号,例如该地区的购买力、货币汇率和当地消费行为,来逐地区设置该商品的最合适价格。

您可以选择要区域定价的商品。当您在游戏中为某个商品启用管理定价时,Roblox 会根据用户的经济位置自动调整该商品的价格。

经济位置并不总与账户位置相同。为了确定用户的经济位置,Roblox 会查看包括VPN使用、账单历史和账户历史在内的信号。如果无法确定其经济位置,用户将看到该商品的默认全球价格。

为了防止用户在赠送或交易具有不同管理价格的商品时出现价格套利,您可以使用 GetUsersPriceLevelsAsync API 管理游戏内转移

启用区域定价

针对通行证

通过管理定价,所有新创建和现有通行证默认启用区域定价。

要禁用通行证的管理定价:

  1. 转到创作并选择一个游戏。
  2. 转到货币化通行证
  3. 选择一个或多个现有通行证。
  4. 点击禁用管理定价
  5. 可选
    要按国家或地区查看管理价格,请选择一个通行证并转到其销售页面。主要国家/地区列表会更新,以显示根据通行证默认价格调整后的价格。要查看所有国家和地区的价格,请点击查看所有国家

针对开发者产品

要为开发者产品启用管理定价:

  1. 确保您的开发者产品具有动态脚本价格
  2. 实现 GetUsersPriceLevelsAsync 方法,以根据用户的价格水平调控商品转移。
  3. 转到创作并选择一个游戏。
  4. 转到货币化开发者产品
  5. 选择一个或多个现有产品,或创建一个新产品。
  6. 点击启用管理定价
  7. 可选
    要按国家或地区查看管理定价,请选择一个产品并转到其基本设置页面。主要国家/地区列表会更新,以显示根据该产品的默认价格调整后的价格。要查看所有国家和地区的管理定价,请点击查看所有国家

针对订阅

对于以Robux定价的订阅,默认启用管理定价,且无法关闭。有关更多信息,请参见创建订阅

当地货币定价的订阅不提供管理定价。

针对头像商品

要为头像商品启用管理定价,请参见发布到市场页面中的定价

检查动态定价

启用管理定价后,无论是游戏内还是游戏外出售,用户看到的商品价格都会因地区而异。但是,如果您已将价格硬编码到游戏的用户界面中,该数字不会更新,因为它不是动态的,也无法被Roblox访问。因此,用户被收取正确的区域特定价格,但用户界面仍显示硬编码的值。

动态价格检查工具会用假Robux价格或假经济位置更新您游戏中出售的所有商品,帮助您识别游戏用户界面中哪些价格是硬编码的,哪些是通过 MarketplaceService 动态脚本的,并从客户端脚本中调用。在您识别出硬编码的通行证后,您可以更新它们以使用 MarketplaceService 函数。

要使用动态价格检查工具:

  1. 转到货币化
    • 对于通行证,请转到通行证
    • 对于开发者产品,请转到开发者产品
  2. 点击**…** 并选择动态价格检查
  3. 添加测试账户下,输入最多五个Roblox用户,以检查硬编码价格。
  4. 选择一种测试类型。
    • 价格固定将使用设定的假Robux金额更新所有动态脚本价格。
    • 位置固定将使用假经济位置的区域特定价格更新所有动态脚本价格。
  5. 点击启用。几分钟后,进入您的游戏以识别硬编码价格。

要禁用动态价格检查工具,转到动态价格检查页面并点击禁用

有关硬编码产品价格与动态脚本价格的更多信息,请参见价格优化页面中的检查动态定价。有关使用 MarketplaceService 函数出售通行证和开发者产品的更多信息,请参见在您的游戏内出售通行证在您的游戏内出售开发者产品

在您的游戏中显示区域价格

通过管理定价,用户看到的价格可能会根据其位置而异。如果您在自定义的游戏内用户界面中显示价格,如 TextLabel,您可以在运行时检索产品信息,以确保显示的价格与购买提示中显示的价格匹配。

要显示单个开发者产品或通行证的区域价格,可以使用 GetProductInfoAsync

要显示所有开发者产品的区域价格,可以使用 GetDeveloperProductsAsync

保护您的交易和赠品

管理定价可能会影响游戏内转移,如交易和赠送。由于不同地区之间的价格差异,可能会发生价格套利(利用相同产品之间的价格差异以获取利润)。为了管理价格套利的潜在问题,您可以使用 GetUsersPriceLevelsAsync API,这使您能够确定用户的相对价格水平,从而实现基于这些水平调控商品转移的逻辑。

GetUsersPriceLevelsAsync 提供一个介于1到1000之间的数值,表示用户的定价水平。该值设计用于表示用户预期支付的全价百分比。价格水平1000表示全局价格,而较低的价格水平表示用户通常由于其经济位置而支付较低价格。

较低的价格水平差异意味着全局价格和用户的管理价格之间的价格差异较小。较高的价格水平差异则意味着两者之间的价格差异较大。例如:

  • 用户A的价格水平为1000,代表全局价格。该用户按商品的基础价格支付100%。
  • 用户B的价格水平为500,代表全局价格的50%。该用户按商品的基础价格支付50%。
  • 一旦您了解每个用户的价格水平,您可以选择根据用户A和用户B的500价格水平差异来批准或阻止赠送或交易。

实现 GetUsersPriceLevelsAsync

要获取参与商品转移的用户的价格水平,请在 MarketplaceService 中调用 GetUsersPriceLevelsAsync 函数。此函数接受一个用户ID数组作为参数,并返回一个包含以下字段的 PriceLevelInfo 对象数组:

type PriceLevelInfo = {
UserId: number,
PriceLevel: number
}

实现该函数后,使用返回的价格水平来选择是否允许进行商品转移。例如,您可以允许价格水平较高的用户将商品赠送给价格水平较低的用户,但只允许价格水平相同的用户之间进行交易。有关更多信息,请参见可用示例

有关 GetUsersPriceLevelsAsync API 的更多信息,请参见 MarketplaceService

示例

以下是您可以使用 GetUsersPriceLevelsAsync 进行区域定价的一些示例。

示例 1:检查用户列表的价格水平

此示例向您展示如何检索用户列表的价格水平,这可以帮助您选择是否允许某个商品转移。

-- 获取 MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- 定义一个函数以检索用户列表的价格水平并创建一个 UserId 到 PriceLevel 的查找表
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- 将每个 PriceLevelInfo 映射到 UserId -> PriceLevel 查找表
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("获取价格水平时出错:", result)
return nil
end
end
-- 使用占位符 ID 的示例
local user1Id = 123456789
local user2Id = 987654321
-- 调用函数并存储结果
local priceLevels = getPriceLevelsLookup({user1Id, user2Id})
-- 如果成功,打印每个用户的价格水平
if priceLevels then
print("用户1的价格水平:", priceLevels[user1Id])
print("用户2的价格水平:", priceLevels[user2Id])
else
print("未能检索价格水平。")
end
示例 2:将发送者的价格水平与接收者的价格水平进行比较

此示例向您展示如何检查发送者的价格水平与接收者的价格水平的示例实现。这可以帮助您管理来自高价地区的用户向低价地区用户的赠送。

-- 获取 MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- 定义一个函数以检索用户列表的价格水平并创建一个 UserId 到 PriceLevel 的查找表
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- 将每个 PriceLevelInfo 映射到 UserId -> PriceLevel 查找表
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("获取价格水平时出错:", result)
return nil
end
end
-- 定义一个函数,检查发送者是否具有与接收者相同或更高的价格水平
-- 参数是发送商品的玩家和接收商品的玩家
-- 如果发送者的价格水平大于或等于接收者的价格水平,则函数返回true
function isSenderPriceLevelHigherOrEqualforGifting(sender, recipient)
local priceLevelsLookup = getPriceLevelsLookup({ sender.UserId, recipient.UserId })
if not priceLevelsLookup then
error("MarketplaceService:GetUsersPriceLevelsAsync 调用失败。无法检索用户价格水平。")
end
local senderPriceLevel = priceLevelsLookup[sender.UserId]
local recipientPriceLevel = priceLevelsLookup[recipient.UserId]
return senderPriceLevel >= recipientPriceLevel
end
示例 3:检查两个用户是否具有相同的价格水平

此示例向您展示如何检查两个用户是否具有相同的价格水平的示例实现。这可以帮助您管理交易,并确保来自不同地区的用户之间的公平交换。

-- 获取 MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- 定义一个函数以检索用户列表的价格水平并创建一个 UserId 到 PriceLevel 的查找表
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- 将每个 PriceLevelInfo 映射到 UserId -> PriceLevel 查找表
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("获取价格水平时出错:", result)
return nil
end
end
-- 定义一个函数,检查两个用户是否具有相同的价格水平
-- 参数是您想比较价格水平的两个用户
-- 如果两个用户具有相同的价格水平,则函数返回true
function haveSamePriceLevelForTrading(userA, userB)
local priceLevelsLookup = getPriceLevelsLookup({ userA.UserId, userB.UserId })
if not priceLevelsLookup then
error("MarketplaceService:GetUsersPriceLevelsAsync 调用失败。无法检索用户价格水平。")
end
local userAPriceLevel = priceLevelsLookup[userA.UserId]
local userBPriceLevel = priceLevelsLookup[userB.UserId]
return userAPriceLevel == userBPriceLevel
end
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。