第21回 ~リーダーボードを作る~

リーダーボードの作り方。さらにプレイヤーが入ってきたときに発生するイベント、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
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回 ~リーダーボードを作る~”
    1. フォルダ名が「leaderstats」になっていない等が考えられます。
      どうしても原因が分からない場合は、リーダーボードを作成している関数の部分を投稿していただければ調べてみます。

コメントを残す