本章把第 32 章的商品假設轉成可檢查的產品設定。Pass 適合一次購買的長期權益;Developer Product 適合可重複購買的消耗品。Roblox 官方 Shop 則是平台用來呈現 Pass 與符合資格 Developer Product 的商品介面。
本章使用 placeholder Product ID。不要把 0 或範例 ID 當成真實商品,也不要由 Assistant 自動上架商品。
ExplorerPass 與 CrystalBundleSmall。ReplicatedStorage.Config.MonetizationConfig。MarketplaceService 取得商品資訊與開啟購買 prompt。官方文件查核日期:2026-07-22。
官方文件指出,Pass 是一次性特殊權益,Developer Product 可重複購買。建立商品前,experience 必須已發布且可在 Roblox 存取。官方 Shop 會顯示 Pass 與符合資格的 Developer Product;它是探索介面,不會替你完成遊戲內交付。
本章使用兩個教學商品:
ExplorerPass
Type: Pass
Effect: cosmetic explorer title + optional trail
CrystalBundleSmall
Type: DeveloperProduct
Effect: grant 100 Crystals after ProcessReceipt
價格不寫死在程式或書稿。UI 應從 Roblox 商品資訊讀取目前玩家看到的名稱與價格。
【Ch33 主任務|建立商品原型】
請為 AI Adventure Island 建立平台商品的 prototype 結構,但不要建立真實商品、不要發布、不要提示玩家付款。
建立:
1. ReplicatedStorage.Config.MonetizationConfig ModuleScript。
2. ExplorerPass,類型為 Pass,ProductId = 0,標註 MUST_REPLACE。
3. CrystalBundleSmall,類型為 DeveloperProduct,ProductId = 0,RewardCrystals = 100,標註 MUST_REPLACE。
4. StarterGui.AdventureHUD.MonetizationPanel,包含兩個商品按鈕與狀態文字。
5. LocalScript 使用 MarketplaceService:GetProductInfo 讀取平台名稱與價格。
6. Pass 按鈕使用 PromptGamePassPurchase。
7. Developer Product 按鈕使用 PromptProductPurchase。
安全限制:
- ProductId 為 0 時停用購買按鈕並顯示「尚未設定商品」。
- client 不得發放 Pass 權益、水晶或任何獎勵。
- client 不得傳送價格或獎勵數量。
- 不要加入 ProcessReceipt;下一章會集中處理。
- 不要啟用 global Shop button 或修改 Creator Hub 設定。
ReplicatedStorage
└── Config
└── MonetizationConfig
StarterGui
└── AdventureHUD
└── MonetizationPanel
├── ExplorerPassButton
├── CrystalBundleButton
├── MonetizationStatusLabel
└── MonetizationHUDController
設定檔骨架:
return {
ExplorerPass = {
ProductType = "Pass",
ProductId = 0, -- MUST_REPLACE
},
CrystalBundleSmall = {
ProductType = "DeveloperProduct",
ProductId = 0, -- MUST_REPLACE
RewardCrystals = 100,
},
}
不要假設所有玩家看到相同價格。UI 顯示平台商品名稱與價格時,應呼叫 GetProductInfo() 並用 pcall 處理失敗。Pass 要指定正確的 InfoType。
購買 prompt 只是平台 UI。prompt 關閉或 finished event 不等於 Developer Product 已安全交付。Developer Product 必須由下一章唯一的 ProcessReceipt callback 處理。
Creator Hub 的 Monetization > Shop 可以整理分類與 Developer Product 的 listed 狀態。Pass 會列在 Shop;Developer Product 即使 unlisted,仍可透過自製遊戲內流程購買。官方 Shop 也可從遊戲選單進入,global Shop button 則是另一個可選入口。
Pass 可以用 UserOwnsGamePassAsync() 查詢。購買完成事件可觸發重新查詢或更新當次 session,但長期權益仍應以平台 ownership 為準,不要把 client boolean 當證明。
GetProductInfo() 失敗時是否顯示可理解訊息?【Ch33 修正 1|移除 Client 商品交付】
目前商品 UI 會在 PromptProductPurchaseFinished 後直接增加 Crystals。
請只修正 client 商品 UI:
- 移除所有獎勵發放與玩家資料修改。
- 保留 GetProductInfo 與購買 prompt。
- 顯示「正在由伺服器確認交易」。
- Developer Product 的交付留給 server-side ProcessReceipt。
- 不要建立第二個 receipt handler。
MonetizationConfig。玩家按下 Buy 不代表商品已交付。下一章會建立唯一的 ProcessReceipt 入口,處理重試、重複 receipt、未知商品與資料保存失敗。
嗨!我是 Wolke,曾任 Google Developer Expert(GDE,2019–2023) 與 LINE API Expert。
我熱衷於研究 AI Agent、n8n 自動化工作流與全端開發架構,致力於將 AI 技術轉化為真正能落地的生產力工具。
如果你喜歡這篇文章,歡迎透過以下方式與我交流:
📚 技術著作
《實用的 Gemini API 開發點子書》:帶你運用 Gemini App、Google AI Studio、Gemini CLI 與 Antigravity IDE,打造 AI Agent 與實用產品。
📝 技術部落格
歡迎追蹤我的 Medium,我會持續分享 Agentic Automation、架構設計與實際開發的踩坑心得。
🎤 技術講座與合作
我持續受邀至技術社群及研討會,分享 AI Agent、自動化工作流、DevOps 與全端開發實戰。
我曾於 DevOpsDays Taipei 2026 主講「不再只是寫腳本!讓 AI 代理人成為你的 SRE 最佳夥伴」工作坊。
如果你的企業、社群或學校正在尋找相關主題講者,歡迎私訊聯繫,洽談講座與工作坊合作!
🎮 我的 Roblox 遊戲
🎁 免費贈送 OpenAI 或 Claude AI 額度
為了鼓勵大家實際動手打造自己的 Roblox 體驗,我每個月會開放:
參加方式:
確認完成後,我會邀請你加入並設定 50 點額度。名額有限,歡迎把握機會!