リーダーボードの作り方。さらにプレイヤーが入ってきたときに発生するイベント、ServerScriptServiceの使い方を理解しましょう。
登場する英単語
英単語 | 読み方 | 解説 |
---|---|---|
ServerScriptService | サーバースクリプトサービス | メインのプログラムを入れる場所 |
GetService | ゲットサービス | 各種のサービスを取得する |
leaderstats | リーダーステーツ | リーダーボード専用フォルダ |
IntValue | イントバリュー | 整数値を保存できるオブジェクト |
Value | バリュー | 「値」 プロパティ、値はここに入れる |
StringValue | ストリングバリュー | 文字列 を保存できるオブジェクト |
PlayerAdded | プレイヤーアッディッド | プレイヤーが入ってきた際に呼ばれる |
PlayerRemoving | プレイヤーリムービング | プレイヤーが退出したときに呼ばれる |
CharacterAdded | キャラクターアッディッド | キャラクターモデルが作られたときに呼ばれる |
CharacterRemoving | キャラクターリムービング | キャラクターモデルが壊れたときに呼ばれる |
GetPlayerFromCharacter | ゲットプレイヤーフラムキャラクター | キャラクターモデルからPlayerを取得する関数 |
チェックポイント
- ゲーム全体をコントロールするプログラムは「 ServerScriptService 」に入れる
- Playersは「game.Players」でも良いが、「game:GetService(“Players”)」で取得するのがベスト
- 「 Players.PlayerAdded 」でゲーム内にプレイヤーが入ってきた際に呼ばれるイベントが設定できる
- Playerに「leaderstats」というフォルダを作成するとリーダーボードが表示される
- リーダーボードにはプレイヤー名の他、4つの項目が表示できる
- 項目は、IntValueやStringValueのオブジェクトをleaderstats下に作成することで追加できる
- 「 Players. PlayerRemoving」でゲームから退出する際に呼ばれるイベントが設定できる
- 「Player.CharacterAdded」は、キャラクターモデルが作られた時に呼ばれるベントが設定できるもの
- 「Player.CharacterRemoving」は、キャラクターモデルが壊れた時に呼ばれるベントが設定できるもの
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local function createLeaderboard(player)
local board = Instance.new("Folder")
board.Name = "leaderstats"
board.Parent = player
local point = Instance.new("IntValue")
point.Name = "Point"
point.Value = 0
point.Parent = board
end
local function onCharacterAdded(character)
print("CharacterAdded が呼ばれた")
end
local function onCharacterRemoving(character)
print("CharacterRemoving が呼ばれた")
end
local function onPlayerRemoving(player)
print("PlayerRemoving が呼ばれた")
end
local function onPlayerAdded(player)
print("PlayerAdded が呼ばれた")
createLeaderboard(player)
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoving)
local ball = ReplicatedStorage:WaitForChild("Ball")
while wait(1) do
local p = ball:Clone()
local x = math.random(-50,50)
local y = p.Position.Y
local z = math.random(-50,50)
p.Position = Vector3.new(x,y,z)
p.Parent = game.Workspace
end
- 「 Players: GetPlayerFromCharacter」 を使うと、キャラクターモデルからPlayerが取得できる
local Players = game:GetService("Players")
local part = script.Parent
local function onTouched(hit)
local character = hit.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
local player = Players:GetPlayerFromCharacter(character)
player.leaderstats.Point.Value = player.leaderstats.Point.Value + 1
part:Destroy()
end
end
part.Touched:Connect(onTouched)
wait(10)
part:Destroy()
ステップアップ
リーダーボードで使用できるデータ型は次の4種類になります。
データ型 | 扱えるデータ |
---|---|
StringValue | 文字列 |
IntValue | 小数点なしの数字 |
NumberValue | 小数点付きの数字 |
BoolValue | 真(true) か 偽(false) のどちらか |
2 thoughts on “第21回 ~リーダーボードを作る~”
コメントを残す
コメントを投稿するにはログインしてください。
リーダーボードに項目を追加するプログラムを作ったのですが、表示されません。どんな理由が考えられますか?
フォルダ名が「leaderstats」になっていない等が考えられます。
どうしても原因が分からない場合は、リーダーボードを作成している関数の部分を投稿していただければ調べてみます。