リーダーボードの作成

リーダーボードは、ゲーム内にいるプレイヤーのスコアや通貨などの情報を表示するロブロックスの機能です。

プレイヤーが取得したコインを保存して表示するリーダーボードを作成してみます。

リーダーボードの初期設定

  1. Explorerで、ServerScriptService の下に、PlayerSetup という名前の新しいスクリプトを作成します。
  2. onPlayerJoin() という関数を作成します。ゲームに入ってきたプレイヤー(player)がパラメーターになります。
  3. フォルダーを作成します。
  4. フォルダーの名称を”leaderstats“にします。この名称でないとリーダーボードに表示されません。
  5. リーダーボード(leaderstats)の親をプレーヤー(player)に設定します。
local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")    -- フォルダーを作成
    leaderstats.Name = "leaderstats"       -- フォルダ名を「leaderstats」にする
    leaderstats.Parent = player            -- リーダーボードの親は player

表示する項目の追加

  1. コインは整数値で保存しますので、IntValue 型のインスタンスを作成します。それ以外のデータ型を使用したい場合は下記をご覧ください。
  2. Coin の項目名(リーダーボードのタイトル部に表示)を “Coin” にします。日本語も使用できます。
  3. コインの初期値は0にします。(スタートの所持金が1000なら、1000にする)
  4. coin は、leaderstats に属しますので、親は leaderstats になります。
  5. さらに表示したい項目がある場合は、上記の1から繰り返すだけです。
    local coin = Instance.new("IntValue")  -- コインは整数値
    coin.Name = "Coin"                     -- 表示は「Coin」にする
    coin.Value = 0                         -- コインの初期値は0にする
    coin.Parent = leaderstats              -- coin の親は leaderstats
end

リーダーボードで扱えるデータ型

リーダーボードでは、下記の4種類のデータ型が使用できます。

IntValue

整数(小数点は使用できない)を扱いたいときに使用します。
単一の符号付き64ビット整数です。整数には小数点は含まれません。プラス、マイナス約9.2兆まで扱うことができます。

BoolValue

真(true) か 偽(false) の2つ値を扱うことができます。

NumberValue

小数点付きの数字を扱いたいときに使用します。
実数(倍精度浮動小数点)を扱うことができます。C言語でいうdouble型です。
IEEE 754表現(1符号ビット、11指数ビット、52小数ビット)を使用して、64ビット(8バイト)で数値を格納します。格納できる最大数値は、9,007,199,254,740,992で、最小値は-9,007,199,254,740,992になります。

StringValue

文字列を扱いたいときに使用します。
最大文字数は、200,000文字までとなります。リーダーボード以外でも使用できるため、長い文字列が扱えるようになっています。

PlayerAddedイベントに紐づけ

プレイヤーがゲームに入ってきたときに発生するイベントがあります。最後にそのイベントに先ほど作成した関数を紐づけします。

  1. Players PlayerAddedイベントに、先ほど作成した onPlayerJoin に紐づけします。これでプレイヤーがゲームに入ってくるタイミングで、onPlayerJoin() 関数が実行されるようになります。
local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")    -- フォルダーを作成
    leaderstats.Name = "leaderstats"       -- フォルダ名を「leaderstats」にする
    leaderstats.Parent = player            -- リーダーボードの親は player

    local coin = Instance.new("IntValue")  -- コインは整数値
    coin.Name = "Coin"                     -- 表示は「Coin」にする
    coin.Value = 0                         -- コインの初期値は0にする
    coin.Parent = leaderstats              -- coin の親は leaderstats
end

game.Players.PlayerAdded:Connect(onPlayerJoin)   -- PlayerAdded イベントに紐づけする

リーダーボードの値の更新

先ほど、作成したリーダーボードの「Coin」という値を更新して見ようと思います。下記の例では、パーツに触れると、1コイン獲得できるというものです。触れた後はパーツを消去します。

  1. Wrokspace パーツを1つ追加し、それにスクリプトを追加します。
  2. パーツに触れると1コイン獲得するということで、Touched イベントを使用します。
  3. まず、パーツに触れたのがプレイヤーかどうかを確認します。
  4. プレイヤーだった場合は、プレイヤー名からリーダーボード(leaderstats)を辿ります。
  5. リーダーボードから Coin の値を取得し、1を加算しその結果を代入します。
  6. 最後に、Touched イベントに紐づけすれば完了です。
local coin = script.Parent

local function onTouched(part)
    local humanoid = part.Parent:FindFirstChild("Humanoid")
    if humanoid then  -- パーツに触れたのはプレイヤー?
        local playerName = part.Parent.Name  -- プレイヤー名を取得
        local player = game.Players:FindFirstChild(playerName)  -- プレイヤーのデータを取得
        -- リーダーボードのCoinの値に1を加算
        player.leaderstats["Coin"].Value = player.leaderstats["Coin"].Value + 1
        coin:Destroy()  -- パーツを消去
    end
end

coin.Touched:Connect(onTouched)  -- Touched イベントに紐づけ

リーダーボードはデータを保存しない

プレイヤーがゲームから出ると、リーダーボードの情報を失うことになります。これらの情報を保持したい場合は、サーバーに保存しなくてはならず特別な処理が必要となります。
プレイヤーデータを保存する方法はこちらに解説しましたのでご覧ください。

2件のコメント

  1. 度々コメントしてすみませんm(_ _)m
    点数表ってどうやってしたら作成できますか?

  2. 点数表とはユーザーランキングのことでしょうか?
    どの辺りまでご理解されているのかが分かりませんが、
    まず、データのセーブは、DataStoreServiceのGetOrderedDataStoreを使用します。
    https://developer.roblox.com/en-us/api-reference/function/DataStoreService/GetOrderedDataStore
    ランキングの表示は、SurfaceGuiを使用します。
    https://developer.roblox.com/en-us/api-reference/class/SurfaceGui

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です