本文へスキップ
🎮

Roblox / Touched / leaderstats

Roblox Studioで触れたらポイントが増える仕組みを作る方法

Part に触れたプレイヤーだけへポイントを加算し、学習用のスコア体験を作ります。

Roblox では、公開に近い形の仕組みを小さく作って試せるのが強みです。 スコア加算はその代表例で、接触判定・プレイヤー判定・表示のつながりを一度に学べます。

自己紹介

ココ先生・喜ぶ
ココ先生仕組みを分かりやすく整理する先生
Roblox では、触れたら反応する仕組みを作れるようになると、 コイン、チェックポイント、ダメージ床など応用が一気に広がります。
はじめちゃん・驚く
はじめちゃんRobloxを学び始めた初心者
クリックより一歩進んで、キャラクターが物に触れたら何か起こる体験を作ってみたいです。スコア表示までつながると嬉しいです。

オープニング対談

ココ先生・楽しむ
ココ先生Roblox の学び始めで特に満足度が高いのは、プレイヤーが動いた結果として何か起こる体験を作ることです。
はじめちゃん・驚く
はじめちゃん触れたらポイントが増えるだけでも、ちゃんとゲームっぽいですね。どこに何の Script を置くかで迷いそうです。
ココ先生・喜ぶ
ココ先生今日は leaderstats を作る Script と、Part に触れたときの Script を分けて考えます。役割が分かれれば理解しやすいですよ。

🎁このレッスンのおみやげ

  • leaderstats と Score の最小構成
  • Touched から player を見つける考え方
  • サーバーで安全に加点する基本
  • 連続接触を抑える簡単な debounce

Roblox では Workspace の Part + Script だけで反応を作り始められます。 体験の結果がすぐ見えるので、初心者の成功体験を作りやすいのが強みです。

1🎯何を作るのか

今回は、マップに置いた Part にプレイヤーが触れたら Score が 1 増える仕組みを作ります。 成功すると、プレイヤー一覧の横に Score が表示され、Part に入るたび数字が増えるようになります。

プレイヤー参加Score を用意
Part に触れるTouched 発火
誰が触れたか確認Humanoid / Player
Score を増やすleaderstats 更新

画面幅に応じて折り返します。横スクロールは不要です。

2🖼️完成イメージ

仕組みはシンプルですが、これが作れるとチェックポイント、コイン、ダメージ床など「ゲームらしい反応」の入口になります。

Robloxの接触から加点までの流れ
接触イベントを受け、プレイヤーか確認し、Score を加算する流れを先に見ておくと Script が読みやすくなります。

3🧠今回の理解ポイント

📊
leaderstats は表示の入口

プレイヤー一覧へ自然に数字を出せるので、最初のスコア体験に向いています。

🤝
Touched は誰が触れたかを確認する

何でも反応するので、Humanoid と Player を絞り込む一手間が大事です。

🛡️
加点はサーバーで行う

スコアのような大事な値はサーバー側 Script で更新すると安心です。

⏱️
連打対策は早めに入れる

debounce を最初から入れておくと、テストが楽で後から壊しにくくなります。

4🛠️Explorer の準備

今回は Script を2か所に分けます。役割を分けると、後から見直しても迷いにくくなります。

Roblox StudioのExplorer配置
leaderstats を作る Script は ServerScriptService、触れた判定の Script は ScorePart の子に置きます。
  1. 1
    Workspace に Part を置く

    分かりやすいように名前を ScorePart にします。

  2. 2
    ServerScriptService を開く

    leaderstats を作る Script の置き場所です。

  3. 3
    Script を2本作る

    LeaderstatsSetup と ScorePart 側 Script を分けて作ります。

  4. 4
    Part の色を変える

    触れる対象が見つけやすいように目立つ色にします。

5📈leaderstats を作る

まずはプレイヤーが参加したときに、Score を持てる状態を作ります。

LeaderstatsSetup.server.lua
lua
game.Players.PlayerAdded:Connect(function(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)

なぜ最初に leaderstats を作るの?

接触 Script より先に Score の置き場ができていると、後半のコードがとても素直に読めます。まず受け皿を作るイメージです。

6Touched で加点する

次に、ScorePart に付けた Script で Touched を受け、触れた相手がプレイヤーかどうかを確認してから加点します。

ScorePart.server.lua
lua
local part = script.Parent
local recentTouches = {}

local function resolvePlayer(hitPart)
    local character = hitPart.Parent
    if not character then
        return nil
    end

    local humanoid = character:FindFirstChildOfClass("Humanoid")
    if not humanoid then
        return nil
    end

    return game.Players:GetPlayerFromCharacter(character)
end

part.Touched:Connect(function(hitPart)
    local player = resolvePlayer(hitPart)
    if not player then
        return
    end

    if recentTouches[player.UserId] then
        return
    end

    recentTouches[player.UserId] = true

    local leaderstats = player:FindFirstChild("leaderstats")
    local score = leaderstats and leaderstats:FindFirstChild("Score")
    if score then
        score.Value += 1
        print(player.Name .. " scored! total = " .. score.Value)
    end

    task.delay(1, function()
        recentTouches[player.UserId] = nil
    end)
end)

ここで大事なのは、hitPart からいきなり Score を増やさないことです。まず Humanoid を持つキャラクターか、 さらにそのキャラクターから Player を取れるか、順番に確かめていきます。

7動作確認

  1. 1
    Play で開始

    まずプレイヤー一覧に Score が出るかを確認します。

  2. 2
    ScorePart に触れる

    触れた瞬間に Score が 1 増えるか確認します。

  3. 3
    すぐ触り直す

    debounce が効いて、連続で増えすぎないか見ます。

  4. 4
    Output を見る

    print が出ると、サーバー側で動いていることも確認できます。

8🧯つまずきやすい点

  • Score が表示されない: leaderstats の Folder 名が正しいか、Score の名前が一致しているかを見直します。
  • 何度も一気に増える: debounce の解除時間が短すぎないか確認します。
  • NPC でも加算される: Humanoid だけでなく Player まで取れているかを確認します。
  • Script が動かない: LocalScript ではなく Script を使っているか見直します。

9📝まとめ

Roblox の接触ギミックは、leaderstats を作る → Touched を拾う → player を確定する → Score を増やすという流れで理解できます。 これができれば、コイン回収やチェックポイントにもつなげやすくなります。

10🚀次の一歩

キャラ対談で総復習

はじめちゃん・楽しむ
はじめちゃんクリックよりも、プレイヤーが実際に触れて反応する仕組みのほうがゲームっぽさを感じました。
ココ先生・喜ぶ
ココ先生その感覚が大事です。体験としては小さくても、接触判定とスコア更新がつながると一気に応用しやすくなります。
はじめちゃん・驚く
はじめちゃん次はコインを消したり、触れたら色が変わったりする演出も足してみたいです。
1

クイズ

Q1. プレイヤー一覧の横に Score を表示したいとき、最初に用意する入れ物はどれですか?

2

クイズ

Q2. Part に触れた瞬間をサーバーで検知するイベントはどれですか?

3

クイズ

Q3. 同じ人が連続で触れたときに加点しすぎないようにするために、今回は何を入れていますか?