スコア・データ初級Robux不要

Roblox StudioでリーダーボードにScoreを表示する方法

Roblox標準のプレイヤー一覧へScore列を追加し、参加した全プレイヤーの初期値が0と表示されるリーダーボードを作ろう。

公開日
Roblox Studioのテスト画面右上にプレイヤー名とScore 0が表示された状態

ゲーム画面の右上へ、プレイヤー名とScoreを並べて表示しよう。Robloxに最初から入っているプレイヤー一覧を使うため、自分で画面UIを組み立てる必要はない。

所要時間は5〜8分。 完成すると、ゲームへ参加したプレイヤー全員の横にScore = 0が表示される。この機能の実装にRobuxは必要なく、ゲームを公開していなくてもStudioで試せる。

今回のゴール

Playを押し、プレイヤー一覧に自分の名前とScore、初期値の0が表示されたら完成。

始める前に

新しいBaseplateでも、作りかけのゲームでも進められる。StudioのPlayとStopがまだ不安なら第1回:Roblox Studioを準備しようを先に試そう。Scriptの作り方を復習したい場合は第4回:溶岩の床をLuauで作るが役立つ。

ここで作るのは、Roblox公式ドキュメントが説明する組み込みのリーダーボードだ。順位を自動で並べ替える「全サーバー共通ランキング」ではない。まずは、現在のゲームに参加している人のScoreを表示する土台を作る。

1. ServerScriptServiceへScriptを追加する

ExplorerでServerScriptServiceを見つけ、右側のからScriptを追加する。名前はLeaderboardに変えておこう。

ServerScriptServiceに置いたLeaderboardスクリプトと、Scoreを作るコード

ServerScriptServiceは、ゲームのルールをサーバー側で動かす場所だ。プレイヤー全員が見るScoreは、各プレイヤーの端末ではなくサーバーで作る。

Tips:Explorerが見当たらないとき

Studio上部のWindowからExplorerを開く。日本語表示では「ウィンドウ」内の「エクスプローラー」に相当する。

2. Scoreを作るコードを書く

追加したScriptに最初から入っているコードをすべて消し、次を貼り付ける。

local Players = game:GetService("Players")

local function setupLeaderboard(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local score = Instance.new("IntValue")
	score.Name = "Score"
	score.Value = 0
	score.Parent = leaderstats
end

Players.PlayerAdded:Connect(setupLeaderboard)

コードは上から順に、次の3つを行っている。

  1. Playersサービスを取得する
  2. 新しいプレイヤーが参加したら、その人の中へleaderstatsフォルダーを作る
  3. フォルダーの中へ、初期値0の整数Scoreを作る

PlayerAddedは、プレイヤーがゲームへ参加したときに発生するイベントだ。詳しい仕様はRoblox公式のPlayers.PlayerAddedでも確認できる。

完成後の中身を図で確認する

Play中、ExplorerのPlayersを開くと、参加したプレイヤーの下は次のような形になる。

Players
└─ 自分のプレイヤー名
   └─ leaderstats
      └─ Score = 0

この親子関係が、そのままプレイヤー一覧の表示へつながる。leaderstatsServerScriptServiceへ入れたり、Scoreをプレイヤーの直下へ置いたりすると、コードが動いても一覧の列にはならない。

コードでは、作ったInstanceへ最後にParentを設定している。名前や初期値を決めてから親へ入れると、ほかの処理が途中の状態を見にくくなるためだ。今回の短いコードでも、作成、設定、配置の順番をそろえておくと、次にScoreを増やす処理を足しやすい。

leaderstatsは小文字のままにする

いちばん大切なのは、フォルダー名のleaderstatsだ。Robloxがこの決まった名前を見つけると、フォルダー内の値をプレイヤー一覧の列として表示する。

LeaderstatsleaderStatsへ変えると表示されない。Script名のLeaderboardは好きな名前でも動くが、フォルダー名だけは小文字で正確に書こう。

IntValueを使う理由

IntValueは、小数を含まない整数を保存する入れ物だ。コイン数や倒した敵の数のように、012と増える値に向いている。

  • score.Name = "Score"が一覧に出る見出し
  • score.Value = 0が参加直後の数値
  • score.Parent = leaderstatsでScoreを表示対象に入れる

この段階では、Scoreを増やす仕組みや退出後の保存はまだない。今回は「全員に0を表示する」ところまでを完成させる。

なぜServerScriptServiceに置くのか

プレイヤーが自分の画面だけでScoreを書き換える作りにすると、ほかの参加者やサーバーが正しい値を共有できない。ServerScriptServiceの通常のScriptでScoreを作れば、サーバーが各プレイヤーの値を用意し、その結果が参加者へ共有される。

これからコイン取得やショップを追加するときも、ゲーム結果に関わる数値はサーバー側を正本にする。画面へ表示するだけの処理と、実際のScoreを変更する処理を分けるのが、安全なゲーム作りの基本になる。

3. PlayしてScore 0を確認する

Studio左上のPlayを押す。キャラクターが表示されたら、キーボードのTabを押してプレイヤー一覧を開く。

テスト中のプレイヤー一覧に名前とScore 0が表示された画面

右上に次の3つが見えれば成功だ。

  • Peopleまたはプレイヤー名の列
  • Score
  • 自分の名前の横に0

環境によってプレイヤー一覧は最初から開いていることもある。閉じるときもTabを押す。確認できたらStopを押し、編集画面へ戻ろう。

プレイヤー一覧のScore列と初期値0を拡大した画面

Stopを押したあと、もう一度Playしても0から始まることも確認しよう。これは不具合ではない。今のScriptは参加時に毎回新しいScoreを作り、初期値を0にしている。退出後も同じ値へ戻したい場合は、後続のデータ保存ガイドでData Storeを追加する。

完了チェック

次の4項目がすべてできたら、今回の作業は完了だ。

  • ServerScriptServiceLeaderboardがある
  • Play中にプレイヤー一覧を開ける
  • 見出しにScoreと表示される
  • 自分の名前の横に0と表示され、Outputに赤いエラーがない

うまく表示されないとき

プレイヤー一覧そのものが見えない

テスト中にTabを押す。Studioの編集画面ではなく、キャラクターを操作できるPlay中に押すのがポイントだ。

名前は出るがScore列がない

次の4か所を見直そう。

  1. LeaderboardServerScriptServiceの中にある
  2. フォルダー名が完全に小文字のleaderstats
  3. ScoreのParentがleaderstats
  4. コードを直したあと、一度StopしてからPlayし直した

Outputに赤い文字が出ている場合は、行番号の近くに打ち間違いがある。特に引用符"と丸括弧()endの抜けを確認する。

Scoreが0ではない

score.Value = 0になっているか確認する。以前のScriptが同じScoreを作っている場合は、いったん別のScriptを無効にしてから試す。

2人でも同じ表示になるか確かめる

余裕があれば、Studioのテスト方法をServer & Clientsへ変え、クライアント数を2にしてPlayする。2つのクライアントそれぞれでTabを押し、Player1Player2の両方にScore = 0が見えれば、参加者ごとに値を作れている。

通常は1〜2クライアントで十分だ。複数人テストの開き方と終了方法はRoblox公式のStudio testing modesにもまとまっている。

2人テストでは、片方のクライアントだけを見るのではなく、どちらの一覧にも2人分の行があるか確認する。Player1とPlayer2は別のPlayerなので、それぞれの中に別々のleaderstatsScoreが作られる。終了するときは通常のStopではなくEnd Sessionを押すと、サーバーと2つのクライアントをまとめて閉じられる。

完成

これで、参加したプレイヤー全員にScore = 0を表示する土台ができた。今回は値を「見せる」ところまでなので、Playを終えるとScoreはリセットされる。

次の機能別ガイド「触れると増えるコインを作る」では、ゲーム内のコインへ触れたときにこのScoreを1ずつ増やす。leaderstatsScoreの名前はそこで使うため、そのまま残しておこう。

公式リファレンス

画像の拡大表示