🎮 Roblox · StarterGui · Luau
Roblox Studioではじめての GUI — ボタンを押したらテキストが変わる
Explorer で UI を置き、LocalScript から MouseButton1Click を1本つなぐ。コードは「参照を取って Connect」から。
ゴールは「プレイ中にボタンを押すたび、ラベルの文言が数え上がる」こと。 DataStore やサーバー同期は扱わず、画面まわりの入口に集中します。
自己紹介
オープニング対談
🎁このレッスンのおみやげ(学べること)
- 📁
StarterGuiの役割 - 🪟
ScreenGuiの階層 - 🔘
TextButton - 📝
TextLabel.Text - ⚡
LocalScript(クライアント) - 🔗
MouseButton1Click
このページは StarterGui + ScreenGui + LocalScript です。 同一の見た目を全員に配るなら StarterGui、プレイ中だけの生成物はスクリプトで PlayerGui に足す、など作法が育っていきます。
Studio のバージョンで UI 名称や既定プロパティは多少異なる場合があります。
1👋導入 — いまからやること
Roblox Studio で Baseplate など任意のテンプレートを開き、 StarterGui 以下に ScreenGui を作ります。その中にボタンとラベルを置き、 LocalScript からクリック回数を数えて TextLabel.Text を書き換えます。
こんな人向け
2🎬流れをつかむ
下図は「Explorer での配置 → Luau で Connect → 再生で確認」の流れです。
画面幅に応じて折り返します。横スクロールは不要です。
3🧰出てくるキーワード(カード)
プレイヤーに配布される GUI の起点。ここに置いた ScreenGui がテンプレートになります。
2D UI を載せるコンテナ。ResetOnSpawn など挙動を後から調整する場面も出てきます。
クリックできる GUI。MouseButton1Click で反応を受け取ります。
表示専用テキスト。Text プロパティを Luau から更新します。
クライアントで動くスクリプト。UI の見た目変更には向き、重要なゲーム状態はサーバー設計も学びます。
子オブジェクトが生成されるまで待つ定番 API。名前のスペルミスに弱いので要注意。
4🧱Explorer での配置
Home タブ → ScreenGui を挿入し、親を StarterGui にします(Explorer でドラッグ)。 その ScreenGui の子として TextButton と TextLabel を追加します。
- Explorer で StarterGui を確認(無ければ挿入)
- ScreenGui を作成し、わかりやすい名前(例:
MainHUD)に - 子に TextButton を置き、名前を
ClickButton、表示文字は「タップ!」など自由に - 兄弟に TextLabel を置き、名前を
StatusLabel、初期 Text は「ボタンを 0 回押しました!」など - 同じ階層(ScreenGui 直下)に LocalScript を追加し、名前は
ClickCounterなど
5📎LocalScript(Luau)
ClickCounter を開き、次のコードを貼り付けます(または追記)。タブ文字は Studio に合わせてスペースに置き換えても OK です。
-- ClickCounter(LocalScript の例)
-- 親は ScreenGui。兄弟に TextButton「ClickButton」と TextLabel「StatusLabel」を置きます。
local screenGui = script.Parent
local clickButton = screenGui:WaitForChild("ClickButton")
local statusLabel = screenGui:WaitForChild("StatusLabel")
local clicks = 0
clickButton.MouseButton1Click:Connect(function()
clicks += 1
statusLabel.Text = ("ボタンを %d 回押しました!"):format(clicks)
end)ファイル名の拡張子は教材上の便宜的な表記です。Studio では「LocalScript」として追加してください。
6🔍コードの読み方
- script.Parent … この LocalScript の親=今回は ScreenGui。兄弟の GUI をここから辿ります。
- WaitForChild …
ClickButton/StatusLabelが見つかるまで待機。名前が違うとずっと待ち続けます。 - MouseButton1Click:Connect … クリックのたびに渡した関数が実行されます。
- clicks += 1 … Luau で足し算の省略記法。状態をローカル変数に保持しています。
7✅プロパティの合わせ方
ClickButton/StatusLabelの名前がコードと完全一致しているか確認(大文字小文字も)- TextButton が他オブジェクトに隠れていないか、サイズと位置を目視(初期の UDim2 でも可)
- LocalScript が ScreenGui の子になっているか(誤って ServerScriptService 等に置いていないか)
- Play(または Play Here)でプレイし、画面上のボタンをクリック
8✨動作確認チャレンジ
- ボタン文言を英語に変え、ラベルの文体も合わせてみる
- 別の TextLabel を追加し、
WaitForChildで参照して「最後に押した時刻」を表示してみる(発展) - Unity のボタンレッスンと手順を並べて比較してみる
9🩹つまずきポイント
- 何も起きない … LocalScript が入っていない、親が ScreenGui ではない、ボタンが透明&非インタラクティブになっていないか。
- Infinite yield(待ち続ける) …
WaitForChildの名前が Explorer と一致していない。 - 出力にエラー …
statusLabelが TextLabel ではない、Text が書けないオブジェクトを指していないか。 - Play していない … Studio 上の編集画面と、実際の PlayerGui では階層の見え方が違うので再生で確認しましょう。
10🏆まとめ
- StarterGui に ScreenGui を置き、TextButton と TextLabel を配置した
- LocalScript から WaitForChild と MouseButton1Click を使った
- カウンタを増やして TextLabel を更新できた
- クライアント側 GUI の入口を掴んだ
11🚀次のステージへ
- 3D の Part をクリック(ClickDetector + サーバー Script)でワールド入力に進む
- RemoteEvent でサーバーに「ボタンが押された」を伝え、信頼できるカウントを持つ(マルチプレイの定番)
- UI レイアウト: UIListLayout、Constraint、スケーリング(UDim2)
- Roblox ロードマップで学習順を俯瞰する
COMIC MODEキャラ対談で復習
Connect と名前そろえのひとこと。
🎮理解チェック(3問)
選択してから「正解を見る」で確認しましょう。
クイズ
Q1. 画面に出す HUD 用の LocalScript は、ふつんどのプレイヤーの端末で動きますか?
クイズ
Q2. TextButton をクリックしたときに反応させるイベントはどれが定番?
クイズ
Q3. 全員に共通の画面 UI の「ひな形」を置く場所は?