本文へスキップ
🎮

Roblox · Workspace · Server Script

Roblox Studioで3Dパーツをクリック — ClickDetector とサーバースクリプト

GUI ではなく 3D の Part をクリック。ClickDetector.MouseClick をサーバーで受け、属性で結果を残す短いルート。

ゴールは「プレイ中にパーツをクリックするたび、サーバー側で回数が増え、Output と属性で確認できる」こと。 RemoteEvent や DataStore は扱わず、3D 入力の入口に集中します。

自己紹介

ココ先生(講師)・喜ぶ
ココ先生やさしい講師
GUI の次は ワールド上のオブジェクトです。どのスクリプトがサーバーで動くかを意識すると、あとでマルチプレイに進みやすくなります。
はじめちゃん(学習者)・笑う
はじめちゃんRoblox ワールドいじり中
画面のクリックはできたけど、キューブをクリックしたいです。みんなに同じ結果を見せるにはどうするの?

オープニング対談

ココ先生(講師)・楽しむ
ココ先生ClickDetector は「この Part をマウスで押したよ」とサーバーに伝えてくれる便利屋さん。あとは Script で Connect するだけ!
はじめちゃん(学習者)・驚く
はじめちゃんえ、LocalScript じゃなくて Script? 中身は同じ Luau なのに場所で違うんですね…
ココ先生(講師)・喜ぶ
ココ先生そう。いまは信頼できるカウント用にサーバー側。HUD だけ変えたいときはまた LocalScript に戻るよ ✨

🎁このレッスンのおみやげ(学べること)

  • 🧊 Workspace の Part
  • 🖱️ ClickDetector
  • 🖥️ Script(サーバー)
  • 🔗 MouseClick
  • 👤 Player 引数
  • 📌 SetAttribute

このページは Workspace + ClickDetector + Script です。 HUD だけ触りたい場合は GUI レッスンと目的が違うので、迷ったらどちらの画面を触りたいかで選んでください。

エクスプローラーの名称はバージョンや表示言語で多少異なる場合があります。

1👋導入 — いまからやること

Baseplate などのテンプレートで、Workspace に Part を置き(立方体で可)、子として ClickDetector を追加します。Script を同じ Part の子に置き、 MouseClick のたびにカウンタを増やして 属性に保存し、Output にも出します。

こんな人向け

GUI レッスンを終えた直後でもOK。3D とサーバースクリプトの組み合わせに触れたい方向け。読むだけ 10 分、組み立てつきで 20〜30 分目安です。

2🎬流れをつかむ

下図は「Part と ClickDetector を用意 → サーバー Script で Connect → 再生してワールドでクリック」の流れです。

Workspace、ClickDetector、Script、プレイテストの流れ図
クリックはサーバーで集計し、Part の属性に残すとデバッグしやすいです
PartWorkspace
ClickDetectorchild
Scriptserver
MouseClickConnect
AttributeTotalClicks
Play3D click

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

3🧰出てくるキーワード(カード)

🧊
Part

ワールド上の立体。サイズが小さすぎるとクリックしづらいので、学習時は立方体を少し大きめに。

🖱️
ClickDetector

Part のクリックを検知するコンポーネント。MouseClick で反応を受け取ります。

🖥️
Script

サーバー側で実行されるスクリプト。ワールドの「正」に近い処理を置きたいときの定番です。

👤
Player 引数

誰がクリックしたか。ログやプレイヤー別処理の入り口になります。

📌
Attribute

インスタンスに数値や文字列をぶら下げられる仕組み。プロパティ欄で確認しやすいです。

🔗
WaitForChild

ClickDetector の名前を確定させてから Connect するための安全な待ち合わせ。

4🧱Explorer での配置

Home タブの Part を挿入し、Workspace に置きます。名前を ClickTarget などにし、Anchored をオンにして落ちないようにしてもよいです。

Workspace の Part の下に ClickDetector と Script がある例
Script と ClickDetector はどちらも Part の子に置く形です
  1. ClickTarget を選択 → + または右クリックメニューから ClickDetector を追加
  2. 同じ Part に Script を追加し、名前を ClickCounter などに
  3. Part が地面にめり込みすぎていないか、カメラからクリックしやすい高さに調整

5📎Script(サーバー・Luau)

ClickCounter(Script)を開き、次のコードを貼り付けます。インデントは Studio に合わせてスペースでも構いません。

ClickCounter.lua
lua
-- ClickCounter(Script = サーバーで実行)
-- 親は Part。子に ClickDetector があります。

local part = script.Parent
local detector = part:WaitForChild("ClickDetector")

local totalClicks = 0

detector.MouseClick:Connect(function(player)
	totalClicks += 1
	part:SetAttribute("TotalClicks", totalClicks)
	print(("[Server] %s clicked -> total %d"):format(player.Name, totalClicks))
end)

Explorer 上は Script として追加してください(LocalScript ではありません)。

6🔍コードの読み方

  • script.Parent … この Script の親= ClickTarget Part。
  • WaitForChild("ClickDetector") … 子の ClickDetector を確実に取得してから接続します。
  • MouseClick:Connect(function(player) … end) … クリックのたびにサーバー上で関数が走ります。
  • totalClicks += 1 … 全プレイヤー共通の合計(このレッスンではシンプルに1本の変数)。
  • SetAttribute … Part を選択したときプロパティに TotalClicks が見えるので確認が楽です。

7プロパティの合わせ方

  1. ClickDetector が Part の直下の子になっているか(別 Part に張り付いていないか)
  2. Script も同じ Part の子であること(ServerScriptService ではないことを確認)
  3. Play を押し、ワールド上の Part をマウスでクリック(モバイルプロジェクトなら入力方式が変わる点に注意)
  4. ViewOutput を開き、[Server] ログが増えるか確認

8動作確認チャレンジ

  • print をやめ、SurfaceGui + TextLabel で Part 表面に数字を出す(発展)
  • プレイヤーごとの回数を table で持つ(次のステップの遠足)
  • GUI レッスンに戻り、RemoteEvent でサーバーと UI をつなぐ話を予習する

9🩹つまずきポイント

  • 何も出ない … Script が LocalScript になっている、ClickDetector が無い、フィルタリングでログが隠れていないか。
  • クリックできない … Part が透明・過小、別オブジェクトに遮られている、MaxActivationDistance などの要件を確認。
  • Infinite yieldWaitForChild の名前と Explorer が一致しているか。
  • Studio と実行時の違い … Play モードでテストし、編集ビューだけで判断しない。

10🏆まとめ

  • Workspace に Part を置き、ClickDetector を子に追加した
  • サーバー Script で MouseClick を Connect した
  • カウンタを属性と Output で確認できた
  • LocalScript との違いの感触を掴んだ

11🚀次のステージへ

  • RemoteEvent / RemoteFunction でクライアントとサーバーをきれいに分離
  • GUI レッスンと合わせて「表示は Local、状態は Server」を設計する
  • Roblox ロードマップで学習順を俯瞰する

COMIC MODEキャラ対談で復習

サーバーで数える意味のひとこと。

はじめちゃん(学習者)・混乱
はじめちゃん合計だけだと友だちとバッティングしちゃいそうで怖い…
ココ先生(講師)・笑う
ココ先生その通りで、本番はプレイヤー別や Remote で設計するよ。いまは『サーバーで1本の数字が動く』感覚を掴む回!
はじめちゃん(学習者)・喜ぶ
はじめちゃん属性に残るの嬉しい。インスペクタで追えるの助かります!
ココ先生(講師)・楽しむ
ココ先生うん。次は SurfaceGui でドンと数字を貼ると、ワールドが一気にゲームっぽくなるよ 🎉

🎮理解チェック(3問)

選択してから「正解を見る」で確認しましょう。

1

クイズ

Q1. Workspace 上の Part のクリックを信頼できる形で処理したいとき、スクリプトは主にどれ?

2

クイズ

Q2. ClickDetector.MouseClick に渡ってくる第1引数として定番なのは?

3

クイズ

Q3. ClickDetector は通常どこに置く?