Roblox · Workspace · Server Script
Roblox Studioで3Dパーツをクリック — ClickDetector とサーバースクリプト
GUI ではなく 3D の Part をクリック。ClickDetector.MouseClick をサーバーで受け、属性で結果を残す短いルート。
ゴールは「プレイ中にパーツをクリックするたび、サーバー側で回数が増え、Output と属性で確認できる」こと。 RemoteEvent や DataStore は扱わず、3D 入力の入口に集中します。
自己紹介
オープニング対談
🎁このレッスンのおみやげ(学べること)
- 🧊
Workspaceの Part - 🖱️
ClickDetector - 🖥️
Script(サーバー) - 🔗
MouseClick - 👤
Player引数 - 📌
SetAttribute
このページは Workspace + ClickDetector + Script です。 HUD だけ触りたい場合は GUI レッスンと目的が違うので、迷ったらどちらの画面を触りたいかで選んでください。
エクスプローラーの名称はバージョンや表示言語で多少異なる場合があります。
1👋導入 — いまからやること
Baseplate などのテンプレートで、Workspace に Part を置き(立方体で可)、子として ClickDetector を追加します。Script を同じ Part の子に置き、 MouseClick のたびにカウンタを増やして 属性に保存し、Output にも出します。
こんな人向け
2🎬流れをつかむ
下図は「Part と ClickDetector を用意 → サーバー Script で Connect → 再生してワールドでクリック」の流れです。
画面幅に応じて折り返します。横スクロールは不要です。
3🧰出てくるキーワード(カード)
ワールド上の立体。サイズが小さすぎるとクリックしづらいので、学習時は立方体を少し大きめに。
Part のクリックを検知するコンポーネント。MouseClick で反応を受け取ります。
サーバー側で実行されるスクリプト。ワールドの「正」に近い処理を置きたいときの定番です。
誰がクリックしたか。ログやプレイヤー別処理の入り口になります。
インスタンスに数値や文字列をぶら下げられる仕組み。プロパティ欄で確認しやすいです。
ClickDetector の名前を確定させてから Connect するための安全な待ち合わせ。
4🧱Explorer での配置
Home タブの Part を挿入し、Workspace に置きます。名前を ClickTarget などにし、Anchored をオンにして落ちないようにしてもよいです。
ClickTargetを選択 → + または右クリックメニューから ClickDetector を追加- 同じ Part に Script を追加し、名前を
ClickCounterなどに - Part が地面にめり込みすぎていないか、カメラからクリックしやすい高さに調整
5📎Script(サーバー・Luau)
ClickCounter(Script)を開き、次のコードを貼り付けます。インデントは Studio に合わせてスペースでも構いません。
-- 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 の親=
ClickTargetPart。 - WaitForChild("ClickDetector") … 子の ClickDetector を確実に取得してから接続します。
- MouseClick:Connect(function(player) … end) … クリックのたびにサーバー上で関数が走ります。
- totalClicks += 1 … 全プレイヤー共通の合計(このレッスンではシンプルに1本の変数)。
- SetAttribute … Part を選択したときプロパティに
TotalClicksが見えるので確認が楽です。
7✅プロパティの合わせ方
- ClickDetector が Part の直下の子になっているか(別 Part に張り付いていないか)
- Script も同じ Part の子であること(ServerScriptService ではないことを確認)
- Play を押し、ワールド上の Part をマウスでクリック(モバイルプロジェクトなら入力方式が変わる点に注意)
- View → Output を開き、
[Server]ログが増えるか確認
8✨動作確認チャレンジ
printをやめ、SurfaceGui + TextLabel で Part 表面に数字を出す(発展)- プレイヤーごとの回数を
tableで持つ(次のステップの遠足) - GUI レッスンに戻り、RemoteEvent でサーバーと UI をつなぐ話を予習する
9🩹つまずきポイント
- 何も出ない … Script が LocalScript になっている、ClickDetector が無い、フィルタリングでログが隠れていないか。
- クリックできない … Part が透明・過小、別オブジェクトに遮られている、MaxActivationDistance などの要件を確認。
- Infinite yield …
WaitForChildの名前と Explorer が一致しているか。 - Studio と実行時の違い … Play モードでテストし、編集ビューだけで判断しない。
10🏆まとめ
- Workspace に Part を置き、ClickDetector を子に追加した
- サーバー Script で MouseClick を Connect した
- カウンタを属性と Output で確認できた
- LocalScript との違いの感触を掴んだ
11🚀次のステージへ
- RemoteEvent / RemoteFunction でクライアントとサーバーをきれいに分離
- GUI レッスンと合わせて「表示は Local、状態は Server」を設計する
- Roblox ロードマップで学習順を俯瞰する
COMIC MODEキャラ対談で復習
サーバーで数える意味のひとこと。
🎮理解チェック(3問)
選択してから「正解を見る」で確認しましょう。
クイズ
Q1. Workspace 上の Part のクリックを信頼できる形で処理したいとき、スクリプトは主にどれ?
クイズ
Q2. ClickDetector.MouseClick に渡ってくる第1引数として定番なのは?
クイズ
Q3. ClickDetector は通常どこに置く?