ゲーム内では、プレイヤーが集めたアイテムなど、各要素が見れないと困ります。何をどれくらい持っているのかをリーダーボードを使って表示します。リーダーボードはRobloxに組み込まれている機能で、各要素の表示にはプログラムが必要です。
リーダーボードの内容はゲームから抜け出ると消えてしまいます。プレーヤーデータを保存したい場合は、DataStoreService というものを利用しますが、これについては高度な知識と経験が必要になります。
リーダーボードの作成
プレイヤーがゲームに参加してきたタイミングで、リーダーボードの作成と各要素の追加を行う必要があります。
- エクスプローラの ServerScriptService の下に、PlayerSetupという名前の新しいスクリプトを作成します。そのスクリプトの中の hello world の行を削除し、説明文をコメントとして記述しておきます。
- コメントの後に、onPlayerJoinというカスタム関数を作成します。プレイヤーがゲームに入ってきた際に使用するもので、パラメータは入室してきたPlayerになります。
-- プレイヤーの各要素を表示するリーダーボードの作成
local function onPlayerJoin(player)
end
- Instanceを使ってフォルダを作成します。それを leaderstats という変数に代入しておきます。
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
end
- 作成したフォルダに leaderstats という名前を付け、それをプレーヤーの親に設定します。フォルダに leaderstats という名前を付けると 「リーダーボード」になります。
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
リーダーボードは組み込み機能であるため、表示されている通りに正確に名前を付ける必要があります。例えば「leaderboard」という名前のフォルダでは機能しません。 逆にリーダーボードに表示したくない情報などは、この名称以外にすれば良いわけです。
- 関数を end で終了させた後に、onPlayerJoin を PlayerAdded イベントに接続します。これで、プレイヤーがゲームに参加するたびに、各プレイヤーにリーダーボードが表示されるようになります。
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
game.Players.PlayerAdded:Connect(onPlayerJoin)
まだテストしないでください。この段階では空のリーダーボードが作成されただけなのでプレイヤー名のみが表示されます。
各要素の追加
次に以下の3つの要素をリーダーボードの項目に追加するプログラムを記述します。
- Gold:プレイヤーの所持金
- Items: プレイヤーがワールドから集めたアイテムの数
- Spaces: プレイヤーが一度に保持できるアイテムの最大数
これらの数値は、それぞれ IntValue と呼ばれる数値のプレースホルダーオブジェクトになります。これは整数を格納することができるオブジェクトです。
Goldの追加
まずは、プレイヤーの所持金として「Gold」を追加します。
- OnPlayerJoin の 「leaderstats.Parent = player」 の下に「local gold = Instance.new(“IntValue”)」 と入力します。これにより、新しい IntValue が作成され、変数 gold に格納されます。
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local gold = Instance.new("IntValue")
- 次に「gold.Name = “Gold “」と入力します。これでIntValueに名前が付き、他のスクリプトで使用できるようになります。また、この名前はリーダーボードの項目名にもなります。日本語も使用できますが、プログラムでのアクセス方法が異なりますので、今回は英語を使用します。
local gold = Instance.new("IntValue")
gold.Name = "Gold"
独自の項目名を使用する場合、その正確な名前とスペルを記録しておいてください。これらは、このシリーズの後半で、他のスクリプトで参照されます。
- 新しい行に「gold.Value = 0」と入力します。 これはプレイヤーの開始値を設定します。
通常の変数は「myNumber = 10」のようになりますが、IntValue はオブジェクトで、そのプロパティValueが数値を保存する場所になります。よって「myIntValue.Value = 10」という記述になります。
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Value = 0
- 「gold.Parent = leaderstats」と入力します。IntValue の gold の親を leaderstats に設定します。こうすることで、leaderstats フォルダの中に Gold という名前の IntValue オブジェクトが追加されます。
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Value = 0
gold.Parent = leaderstats
- プロジェクトをプレイすると、リーダーボードが右上に表示され、プレイヤー名と Gold という項目が表示されると思います。
トラブルシューティングのヒント
リーダーボードが表示されない場合は、次のことを試してください。
- 「leaderstats」の1文字目は小文字のエルになっていることを確認してください。
- 「.Value」 の1文字目が大文字であることを確認してください。
- Gold の Parent に leaderstats が設定されていることを確認してください。
ItemsとSpacesの追加
Items は、ゲーム デザインのドキュメントに基づいたものであれば何でも構いません。Items の代わりに crystals にすることもできます。
- 要素と要素を区切ることで見やすくなりますので空白行を追加します。Gold の場合と同じ方法で、新しい IntValue を作り、それをリーダーボードに追加します。
gold.Parent = leaderstats
local items= Instance.new("IntValue")
items.Name = "Items"
items.Value = 0
items.Parent = leaderstats
- 次にバッグ容量を表す Spaces を作成します。初期のバッグ容量は2とします。プレイヤーは一度に2つのアイテムしか保持できないというわけです。
items.Parent = leaderstats
local spaces = Instance.new("IntValue")
spaces.Name = "Spaces"
spaces.Value = 2
spaces.Parent = leaderstats
- プロジェクトをテストします。プレーヤーには、Gold、Items、およびSpacesの3つの項目が追加されたリーダーボードが表示されると思います。
リーダーボードが表示されない場合は、以下を確認してください。
- リーダーボードに数値が表示されない場合は、各 IntValue が leaderstats の親であることを確認してください。
- 各 IntValue のスペルが示されている通りであることを確認してください。
- PlayerAdded イベントがスクリプトの最後にあることを確認します。
完成した PlayerSetup スクリプト
スクリプトの完成版は以下の通りです。
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Value = 0
gold.Parent = leaderstats
local items= Instance.new("IntValue")
items.Name = "Items"
items.Value = 0
items.Parent = leaderstats
local spaces = Instance.new("IntValue")
spaces.Name = "Spaces"
spaces.Value = 2
spaces.Parent = leaderstats
end
game.Players.PlayerAdded:Connect(onPlayerJoin)
[ 1.マップの作成 ]
[ 3.アイテムを集める ]