
リーダーボードに値を表示する方法は分かったけど、保存する方法が分からないなぁ。
データをセーブする方法を教えてください!

わかりました!
データのセーブとロードの方法について教えます。
出来るようになること
- リーダーボードの値をセーブ、ロードすることが出来るようになる。
DataStoreとは?
データをセーブするためには、DataStoreを使います。DataStoreを使用することで、ユーザのプレイデータを保存したり、マルチプレイヤー用のゲーム状態を同期したりすることができます。DataStoreは、データの読み書きが高速であるため、ロブロックスのゲーム開発において重要な機能となっています。
DataStoreは、Key、Value型のデータベースです。キーと値によってデータが管理されています。
KeyとValueは、保存したいデータ(Value:値)に対応する(Key:キー)を設定し、ペアで格納する方式です。Keyには、一意となるユニークな値を指定します。Valueには、値や文字列を指定できます。

DataStore のサービスを使うためには、DataStoreServiceを利用します。
local DataStoreService = game:GetService("DataStoreService")
DataStore を利用するデータベースの名前を決めます。ここでは、”GameData” としました。
local dataStore = DataStoreService:GetDataStore("GameData")
データをセーブする
データをセーブするには、dataStore:SetAsync(datakey, data)を使います。保存したい値と対応するキーを設定し、両者をセットでストレージなどに書き込みます。既存のキーを指定して書き込むと新たな値で上書きされます。
datakey には、一意となるユニークな値を指定します。コードの例では、datakey をユニークな値にするため、プレイヤーのユーザIDを指定し、プレフィックスとして”-win”を付けています。
data には、datakey の対となる値を指定します。コードの例では、プレイヤーの勝利数の値を指定しています。
-- データをセーブする
local function savePlayerData(player)
local datakey = player.userId.."-win"
local data = player.leaderstats["勝利数"].Value
repeat
local success, errormessage = pcall(function()
dataStore:SetAsync(datakey, data)
end)
until (success)
end
データを読み出す
データをセーブするには、dataStore:GetAsync(datakey)を使います。キーを指定すると対応する値を取り出すことができます。
datakey を指定すると、datakey に対応した値が取れます。
local winValue
repeat
local success, errorMessage = pcall(function()
winValue = dataStore:GetAsync(datakey)
end)
wait(1)
until(success)
実装する
スクリプトをServerScriptService に置きしました。ServerScriptService に置かれたスクリプトは、プレイヤーがログインすると読み込まれます。
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local dataStore = DataStoreService:GetDataStore("GameData")
-- プレイヤーの設定
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local datakey = player.userId.."-win"
local winValue
repeat
local success, errorMessage = pcall(function()
winValue = dataStore:GetAsync(datakey)
end)
wait(1)
until(success)
local winCnt = Instance.new('IntValue')
winCnt.Name = "勝利数"
winCnt.Value = winValue
winCnt.Parent = leaderstats
end
-- データをセーブする
local function savePlayerData(player)
local datakey = player.userId.."-win"
local data = player.leaderstats["勝利数"].Value
repeat
local success, errormessage = pcall(function()
dataStore:SetAsync(datakey, data)
end)
until (success)
end
Players.PlayerAdded:Connect(onPlayerJoin) -- プレイヤーがゲームに参加した時に呼ばれます
Players.PlayerRemoving:Connect(savePlayerData) -- プレイヤーがゲームから離れた時に呼ばれます



コメント