😎
【Roblox】ゲームパスの作成方法
はじめに
今回はプレイヤーに永久的に機能を付与させたりする時に使われるゲームパスの実装方法を解説します。
あと最初でめちゃくちゃ詰まった部分でゲームパス購入テストの方法についても共有します。
公式Reference
実装順序
- ゲームパスの作成
- ローカルスクリプトでIDをを付与してAPIを叩く
- サーバースクリプトでAPIハンドラから購入されたことを受け取る
- ゲームパスIDに合わせて処理を実行する
ゲームパスの作成
プレースを作成して保存が完了したらクリエイターハブへ行く
作成したワールドをクリック
パスを作成するタブをクリック
作成をクリック
パスの名前と画像を決めてパスを作成をクリック
作成したパスをクリック
販売中に変更し価格を決め変更を保存する
アセットIDをメモしておく
終了!
UIの配置
ローカルスクリプト
ローカルスクリプトでゲームパス購入APIを叩く処理を書いていきます。
local Players = game:GetService("Players")
local MarketplaceService = game:GetService("MarketplaceService")
local player = Players.LocalPlayer
local gui = script.Parent.ScreenGui
local firstButton = gui.FirstButton
local secondButton = gui.SecondButton
-- パスの購入を促す関数
local function promptPassPurchase(passId)
local hasPass = false
local success, message = pcall(function()
hasPass = MarketplaceService:UserOwnsGamePassAsync(player.UserId, passId)
end)
if not success then
warn("Error while checking if player has pass: " .. tostring(message))
return
end
if hasPass then
-- プレイヤーがすでにパスを所有している場合; 相手に伝える
print("You already own this pass.")
else
-- プレイヤーがすでにパスを所有していない場合; 購入を促す
MarketplaceService:PromptGamePassPurchase(player, passId)
end
end
firstButton.Activated:Connect(function()
--FirstPassのIDを引数に入れる
promptPassPurchase(862267773)
end)
secondButton.Activated:Connect(function()
--SecondPassのIDを引数に入れる
promptPassPurchase(863161359)
end)
サーバースクリプト
サーバースクリプトでは購入されたイベントを受け取りそれぞれに合わせての処理を実行していきます。
local MarketplaceService = game:GetService("MarketplaceService")
local passFunctions = {}
--[]中にはFirstPassのID
passFunctions[862267773] = function(player)
print("FirstPassが購入された")
end
--[]中にはSecondPassのID
passFunctions[863161359] = function(player)
print("SecondPassが購入された")
end
-- 完了したプロンプトと購入を処理する関数
local function onPromptPurchaseFinished(player, purchasedPassID, purchaseSuccess)
if purchaseSuccess then
-- このプレイヤーにパスに関連した能力かボーナスを割り当てる
passFunctions[purchasedPassID](player)
else
print(player.Name .. " failed to purchase the Pass with ID " .. purchasedPassID)
end
end
MarketplaceService.PromptGamePassPurchaseFinished:Connect(onPromptPurchaseFinished)
サーバー側のスクリプトも開発者製品の実装と似たような感じで書けそうですね。
テストする方法
Roblox Studio内の通常再生で実行するとなぜかすでにパスを持ってる判定になってしまうのでその回避方法を共有します。
テストタブを押しクライアントとサーバーの欄にある設定を以下のようにして開始
ボタンを押してもらうだけでOKです。
実行するとサーバー用のRoblox Studioとクライアント用(操作する用)のStudioが開くことが確認出来たら完璧です。クライアント用で購入ボタンを押してもらうとテストでゲームパスを購入することができます。
※以下の動画に実際にテストしているものがのってます
実行結果
Discussion