開発者製品は、バーチャル空間内の通貨、弾薬、ポーションなど、ユーザーが複数回購入できるアイテムまたは能力です。
開発者製品の作成
開発者製品に使用する画像を作成する場合は、以下の要件を考慮してください。
- 512×512 ピクセルのテンプレートを使用します。
- .jpg、.png、.bmpのいずれかの形式で画像を保存します。
- アップロードのプロセスでは、最終的な開発者製品を円形画像にトリミングして切り出すため、円形の境界の外側に重要な部分を入れないようにしてください。
新しい開発者製品を作成する方法
クリエーターダッシュボードに移動します。
開発者製品を作成したいバーチャル空間をクリックします。 バーチャル空間の概要ページが表示されます。
左側のナビゲーションで、関連アイテムを選択します。 関連アイテムページが表示されます。
横並びナビゲーションで、開発者製品を選択します。 そのバーチャル空間のすべての開発者製品が表示されます。
開発者製品を作成ボタンをクリックします。 開発者製品を作成ページが表示されます。
画像をアップロードボタンをクリックします。 ファイルブラウザが表示されます。
アイコンとして表示したい画像を選択し、開くボタンをクリックします。
以下のフィールドに入力します。
- 名前:開発者製品のタイトル。
- 説明:ユーザーが購入する開発者製品の内容の説明。
- Robux の価格:開発者製品のユーザーに課金したい Robux 金額。
開発者製品を作成ボタンをクリックします。 開発者製品は、関連アイテムページの開発者製品セクション内に表示されます。
開発者製品 ID を探す
開発者製品 ID は、開発者製品の一意の識別子です。 バッジをスクリプトするときに、この ID が必要です。
開発者製品 ID を探す方法
バーチャル空間の関連アイテムページの開発者製品セクションに移動します。
開発者製品のサムネイルにカーソルを合わせ、
⋯ ボタンをクリックします。 コンテキストメニューが表示されます。 アセット ID をコピーを選択します。 開発者製品 ID が、クリップボードにコピーされます。
開発者製品のスクリプト
バーチャル空間内でのエフェクトの開発者製品を導入するには、スクリプトを使用する必要があります。
一般的な開発者製品のスクリプト使用例には以下が含まれます。
購入を促す
ユーザーに対して、開発者製品の購入を MarketplaceServiceのPromptProductPurchase() メソッドを使って促すことができます。 仮想空間のニーズに応じて、ユーザーがボタンを押したときやキャラクターが業者のノンプレイヤーキャラクター(NPC)に話しかけたときなどの状況でpromptPurchase()関数を呼び出すことができます。
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local productId = 0000000 -- Change this to your developer product ID
-- Function to prompt purchase of the developer product
local function promptPurchase()
MarketplaceService:PromptProductPurchase(player, productId)
end
購入の処理
ユーザーが開発者製品を購入した後、取引の処理と記録を行うのはあなたの責任です。 MarketplaceService.ProcessReceiptコールバックを使用して、ServerScriptService内のScriptを介してこれを行うことができます。
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local productFunctions = {}
-- ProductId 123123 brings the user back to full health
productFunctions[123123] = function(receipt, player)
if player.Character and player.Character:FindFirstChild("Humanoid") then
player.Character.Humanoid.Health = player.Character.Humanoid.MaxHealth
-- Indicate a successful purchase
return true
end
end
-- ProductId 456456 awards 100 gold to the user
productFunctions[456456] = function(receipt, player)
local stats = player:FindFirstChild("leaderstats")
local gold = stats and stats:FindFirstChild("Gold")
if gold then
gold.Value = gold.Value + 100
return true
end
end
local function processReceipt(receiptInfo)
local userId = receiptInfo.PlayerId
local productId = receiptInfo.ProductId
local player = Players:GetPlayerByUserId(userId)
if player then
-- Get the handler function associated with the developer product ID and attempt to run it
local handler = productFunctions[productId]
local success, result = pcall(handler, receiptInfo, player)
if success then
-- The user has received their benefits!
-- 取引を確認するのに PurchaseAllowed を返します。
return Enum.ProductPurchaseDecision.PurchaseGranted
else
warn(""Failed to process receipt:"", receiptInfo, result)
end
end
-- ユーザーへの報酬が付与できませんでした。
-- 次にユーザーが参加するときにもう一度試すには NotProcessedYet を返します。
return Enum.ProductPurchaseDecision.NotProcessedYet
end
-- callback を設定。これはサーバー上の一つのスクリプトで一回だけできます!
MarketplaceService.ProcessReceipt = processReceipt
情報の取得
価格、名前、画像など、特定の開発者製品に関する情報を取得するには、Enum.InfoType.Product の第二引数を持つMarketplaceService:GetProductInfo() 関数を使用します。 例:
local MarketplaceService = game:GetService("MarketplaceService")
local productId = 000000 -- これをあなたの開発者製品IDに変更
local productInfo = MarketplaceService:GetProductInfo(productId, Enum.InfoType.Product)
local success, productInfo = pcall(function()
return MarketplaceService:GetProductInfo(productId, Enum.InfoType.Product)
end)
if success then
-- productInfoをここで使用!
end
GetDeveloperProductsAsync() メソッドを使用して、仮想空間のすべて開発製品のデータを取得することもできます。 これは、点検やフィルタができる仮想空間内ショップまたは製品リスト GUI といったものを構築できるPages オブジェクトを返します。
例えば、以下のスクリプトはバーチャル空間内の開発者製品の名前、価格、ID、説明、アセット ID を表示します。
local MarketplaceService = game:GetService("MarketplaceService")
local success, developerProducts = pcall(function()
return MarketplaceService:GetDeveloperProductsAsync():GetCurrentPage()
end)
if developerProducts then
for _, developerProduct in pairs(developerProducts) do
for field, value in pairs(developerProduct) do
print(field .. ": " .. value)
end
print(" ")
end
end