作成したコイン拾いゲームにセーブ機能を追加する
もととなるゲーム
APIの利用を許可する
HomeタブのGameSettingsを選択、SecurityタブのEnable Studio Access to API Servicesを有効にしてSaveを選択する
プレイヤーが追加されたときにデータをロードする
CoinAmountLeaderBoardスクリプトを開き、リーダーボード初期化前にデータをロードする
local Players = game:GetService("Players") -- DataStoreを利用するためのサービスクラスを取得 local DataStoreService = game:GetService("DataStoreService") -- Dummyという名前のDataStoreを取得/生成する local coinStore = DataStoreService:GetDataStore("Coin") local function leaderboardSetup(player) local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player -- userIdからData用のキーを生成する local datakey = player.userId.."-coin" -- 成功するまでデータのロードを試みる local coinValue repeat print("try load data") local success, errorMessage = pcall(function() coinValue = coinStore:GetAsync(datakey) end) wait(1) until(success) -- ロードしたデータを反映させる local stage = Instance.new("IntValue") stage.Name = "Coin" stage.Value = coinValue stage.Parent = leaderstats end -- プレイヤーが追加されたときにリーダーボードを初期化する Players.PlayerAdded:Connect(leaderboardSetup)
プレイヤーがゲームから出るときにデータを保存する
プレイヤーがゲームから出るときにデータを保存する関数を呼び出す
local function savePlayerData(player) -- userIdからData用のキーを生成する local datakey = player.userId.."-coin" -- データを保存する local data = tonumber(player.leaderstats.Coin.Value) repeat local success, errormessage = pcall(function() coinStore:SetAsync(datakey, data) end) until (success) end -- プレイヤーがゲームから出ようとしたときのイベントを登録する Players.PlayerRemoving:Connect(savePlayerData)
出力
ゲームを開始してコインを集めゲームを終了したあと、再度ゲームを再開するとデータが保存されていることを確認できる
コード全文
local Players = game:GetService("Players") local DataStoreService = game:GetService("DataStoreService") local coinStore = DataStoreService:GetDataStore("Coin") local function leaderboardSetup(player) local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local datakey = player.userId.."-coin" local coinValue repeat print("try load data") local success, errorMessage = pcall(function() coinValue = coinStore:GetAsync(datakey) end) wait(1) until(success) local stage = Instance.new("IntValue") stage.Name = "Coin" stage.Value = coinValue stage.Parent = leaderstats end local function savePlayerData(player) local datakey = player.userId.."-coin" local data = tonumber(player.leaderstats.Coin.Value) repeat local success, errormessage = pcall(function() coinStore:SetAsync(datakey, data) end) until (success) end Players.PlayerAdded:Connect(leaderboardSetup) Players.PlayerRemoving:Connect(savePlayerData)
関連