遊戲通常需要在玩家的等級、經驗點、庫存項目、金幣/現金等之間儲存一些 持久資料 。
此教學將向您展示如何創建基本 資料存儲 、儲存樣本資料,並在遊戲會作業中回閱資料。
啟用工作室存取
由預設情況下,在 Studio 測試的遊戲無法存取資料儲存,因此您必須先啟用它們。
確認您的遊戲是 已發行 (File > 發布到 Roblox) 才能啟用 Studio 存使用權 通行權 存取。
從 首頁 標籤開啟 遊戲設定 窗口。
在 安全 部分中,切換 啟用 Studio 存取 API 服務 。
按一下 儲存 以註冊您的變更。
創建資料存取
資料儲存會由 特殊名稱 來識別。這個範例中,名為 PlayerGold 的資料儲存會儲存每個玩家的黃金。
在 Class.ServerScriptService 裡,創建一個名為 ServerScriptService 的新 Class.Script 。
資料儲存由 DataStoreService 管理,所以在第一行取得服務。
local DataStoreService = game:GetService("DataStoreService")使用 DataStoreService:GetDataStore() 與 "PlayerGold" 字串。這會存取 PlayerGold 資料存檔,如果它已存在,或在創建它。
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")
儲存資料
資料存取庫是基本上像 Lua 桌子一樣的字典。 每個資料存取庫的值都由獨特的 鑰匙 索引,例如玩家的獨特 UserId 或只是遊戲促銷的名稱串。
玩家資料範例
鑰匙 | 價值 |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
促銷範例
鑰匙 | 價值 |
---|---|
特殊活動 | 夏季派對 2 |
促銷代碼 | 獎勵123 |
可以存取派對地方 | 真的 |
要將玩家資料儲存在資料存取中商店 商家:
為數據存取鑰鍵創建變量 playerUserID。然後使用 playerGold 存儲玩家的起始黃金數量。
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- 數據存取鑰匙和值local playerUserID = 505306092local playerGold = 250要將資料儲存到 PlayerGold 資料存商店 商家中,請在受保護的呼叫中, SetAsync 內,傳送鑰匙和值變量。
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- 數據存取鑰匙和值local playerUserID = 505306092local playerGold = 250-- 設定資料存取鑰鍵local setSuccess, errorMessage = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not setSuccess thenwarn(errorMessage)end
像 Class.GlobalDataStore:SetAsync()|SetAsync() 這樣的函數是網路呼叫,可能會時間不時發生失敗。顯示上方的圖示, Global.LuaGlobals.pcall() 用於偵測並處理此類故障。
在最基本的形式中,pcall() 接受一個函數,並且返回兩個值:
- 狀態 (boolean); 此狀態將在執行無錯誤的功能時是真的,或者在執行錯誤的時候會是假的。
- 功能或錯誤訊息的返回值。
在上面的範例中,狀態 (setSuccess ) 在第 12 行中測試,如果 SetAsync() 因任何原因失敗,errorMessage 將在輸出窗口中顯示。
閱取資料
要從資料商店 商家取中閱取資料,請使用 GetAsync() 並且使用指定的鑰匙名稱。
local setSuccess, errorMessage = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not setSuccess thenwarn(errorMessage)end-- 閱讀資料存取鑰鍵local getSuccess, currentGold = pcall(function()return goldStore:GetAsync(playerUserID)end)if getSuccess thenprint(currentGold)end要測試此腳指令碼,請按一下 執行 並注意 currentGold 值已列印到 輸出 窗口。注意,這可能需要幾秒鐘,因為功能必須連接到資料存取服務器。
示例項目
現在您了解基本資料儲存使用方法,請在示例遊戲中測試。
黃金搶礦 收集盡可能多的黃金塊,以便在遊戲會議之間保持個人記錄。
您也可以在 Studio 中編輯遊戲,並且探索包含資料自動儲存等功能的強化 GoldManager 指令碼。