Robloxのリーダーボード
Robloxではリーダーボードというシステムを利用することで、スコアや通貨、レースの最速タイムなどのデータを表示することができる

リーダーボードのセットアップ
- ServerScriptService配下に新しいスクリプトを作成、名前をLeaderBoardとする

2. スクリプトでleaderboardSetup関数を作成、PlayerAddedのコールバックに登録する
local Players = game:GetService("Players")
-- プレイヤーがゲームに入ったときに呼び出される
local function leaderboardSetup(player)
end
-- プレイヤーが追加されたときに呼び出す関数を登録する
Players.PlayerAdded:Connect(leaderboardSetup)
3. leaderboadSetup関数内で新しいフォルダを作成し、名前をleaderstasに変更し、その親オブジェクトにplayerを登録する
local function leaderboardSetup(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
この時点でゲームをプレイするとPlayer配下にleaderstasフォルダが作成されていることが確認できる

※フォルダの名前は必ずleaderstatsにする。他の名前を使用するとleaderboardに登録できない。
4.Intのインスタンスを作成し、名前をStageに変更する。そしてそのインスタンスの親に作成したleaderstatsフォルダを指定する。
local function leaderboardSetup(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Value = 1
stage.Parent = leaderstats
end
ゲームをプレイすると名前とステージの情報が表示される

コード全文
local Players = game:GetService("Players")
-- プレイヤーがゲームに入ったときに呼び出される
local function leaderboardSetup(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Value = 1
stage.Parent = leaderstats
end
-- プレイヤーが呼び出されたときに呼び出す関数を登録する
Players.PlayerAdded:Connect(leaderboardSetup)
リーダーボードの更新
リーダーボードの更新を行うために、触ったらステージの値を増やすオブジェクトを作成する
あたらしいパーツを作成し、AddProgressPartと名前をつける

作成したパーツの配下にスクリプトを新規作成、名前をAddProgressOnTouchにする

以下このスクリプトを編集する
- パーツに触れたときに実行するイベントを作成、登録する
-- スクリプトがアタッチされているパーツを取得
local part = script.Parent
-- パーツに触れたときのイベント
local function onPartTouch(otherPart)
print("detect touch part")
end
-- パーツが触られたときに登録した関数を実行する
part.Touched:Connect(onPartTouch)
出力

2. 先程作成したonPartTouchのprint文を削除、代わりにパーツに触れた対象がプレイヤーだった場合、Stageの値を増やす処理を実装する
-- プレイヤーのサービスクラスを取得
local Players = game:GetService("Players")
local part = script.Parent
local function onPartTouch(otherPart)
-- 触れたパーツの親パーツを取得
local partParent = otherPart.Parent
-- 親パーツの子供からHumanoidクラスをもっているパーツを見つける
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
-- Humanoidが見つかったら更新処理に入る
if humanoid then
-- Playerサービスクラスからパーツを触ったプレイヤーを取得
local player = Players:GetPlayerFromCharacter(partParent)
-- プレイヤーからleaderstasを取得し、更新する
local leaderstats = player.leaderstats
local stage = leaderstats and leaderstats:FindFirstChild("Stage")
if stage then
stage.Value += 1
end
end
end
part.Touched:Connect(onPartTouch)
出力
パーツに触れるたびにStageの値が増える
