🖱️ Unity ハンズオン · uGUI
UnityでUIボタンを押したらテキストが変わる — uGUI はじめの一歩
Canvas と Button、TextMeshPro を Inspector でつなぐ。コードは「public メソッドを1つ」から。
ゴールは「Game ビューでボタンを押すたびに、ラベル文字が書き換わる」こと。 アニメーションや複雑なレイアウトは扱わず、イベントの配線に集中します。
自己紹介
オープニング対談
🎁このレッスンのおみやげ(学べること)
- 🖼️
Canvasの役割 - 🔘
Buttonと On Click () - 📝
TextMeshProUGUI - 🔗
[SerializeField]で参照 - 📣 インスペクタ公開メソッドのつなぎ方
- ⚡ TextMeshPro パッケージの初回インポート
このページは Unity uGUI + TextMeshPro です。 UI Toolkit とは別系統です(どちらも現場で使われます)。
Unity 6 / 2022 LTS 系を想定。メニュー名は若干異なる場合があります。
1👋導入 — いまからやること
Game 視点でクリックできるボタンを置き、押すたびに TextMeshPro の文字列を書き換えます。カウンタを 1 足す程度の短いロジックです。
こんな人向け
2🎬流れをつかむ
下図は「画面 → スクリプト → インスペクタ配線 → 再生」の流れです。
画面幅に応じて折り返します。横スクロールは不要です。
3🧰出てくるキーワード(カード)
画面座標系で UI を載せるルート。Render Mode は最初 Screen Space - Overlay で問題ないことが多いです。
クリック領域。子に Text (TMP) を置けばラベル付きボタンになります。
ふちどりのきれいな UI テキスト。using TMPro; と .text プロパティで更新します。
UI の入力を橋渡し。Canvas 作成時に自動で置かれることが多いです。無いとボタンが反応しません。
Inspector 上のイベントリスト。オブジェクトとシグネチャなし public メソッドを指定します。
private フィールドでも Inspector に出せる。Text 参照をドラッグで渡しておくと楽です。
4🧱TMP の準備とヒエラルキー
初めて TextMeshPro を使うプロジェクトでは、メニューから Window → TextMeshPro → Import TMP Essential Resources(表記はバージョンで多少異なる)を実行しておくと安全です。
- ヒエラルキーで右クリック → UI → Canvas(EventSystem も自動生成されることが多い)
- Canvas 下に UI → Button - TextMeshPro を作成(自動で Text 子が付く場合あり)
- 同じく Canvas 下に UI → Text - TextMeshPro を追加し、名前を
StatusLabelなどに - 空の GameObject を作成し
UiClickCounterを付ける場所に(後でスクリプトを載せます)
5📎スクリプト UiClickCounter.cs
Assets で Create → C# Script。クラス名とファイル名を UiClickCounter にそろえます。
using TMPro;
using UnityEngine;
/// <summary>
/// ボタンから呼ぶ用の公開メソッドで、TextMeshProUGUI の文言を書き換えます。
/// Button の On Click () に、このコンポーネントが付いたオブジェクトを指定して紐づけます。
/// </summary>
public class UiClickCounter : MonoBehaviour
{
[Header("更新したいラベル")]
[SerializeField] private TextMeshProUGUI statusText;
private int clicks;
/// <summary>Inspector の Button → On Click () からこのメソッドを選びます。</summary>
public void OnButtonPressed()
{
clicks++;
statusText.text = $"ボタンを {clicks} 回押しました!";
}
}6🔍コードの読み方
- TextMeshProUGUI statusText … 更新対象のラベル参照。Inspector でドラッグ割り当てします。
- OnButtonPressed …
publicかつ引数なしである必要があります(この形が Button イベントから選びやすい)。 - clicks … 状態をフィールドに持ち、クリックのたびに増やして文字列へ反映しています。
7✅Inspector での配線
UiClickCounterをアタッチした GameObject を選択し、Status Text 欄にStatusLabel(TextMeshProUGUI)をドラッグ。- Button オブジェクトを選択。Button コンポーネントの On Click () で
+を押す。 - 出てきたスロットに
UiClickCounterが付いた GameObject をドラッグ。 - 右の関数ドロップダウンから UiClickCounter → OnButtonPressed を選択。
- Play し、Game ビューでボタンをクリック。ラベルが更新されれば完了。
8✨動作確認チャレンジ
- ボタンの子 Text と StatusLabel を別々にして、見た目を整理してみる
- メソッドをもう1つ増やし、On Click に複数エントリを登録して連続で呼ぶ(リセット用など)
- 前レッスンの回転スクリプトと同じシーンに UI を足してもよい(レイアウトに注意)
9🩹つまずきポイント
- ボタンが反応しない … EventSystem がシーンにあるか、Button の
interactable、 前面に他 UI が被っていないか確認。 - On Click にメソッドが出ない …
publicか、引数なしか、スクリプトにコンパイルエラーがないか確認。 - NullReferenceException …
statusTextを Inspector で割り当て忘れていないか。 - テキストが豆腐になる … TMP のフォールバックフォントや Import が必要な場合があります。
10🏆まとめ
- Canvas / Button / TextMeshProUGUI を配置した
- SerializeField でテキスト参照を渡した
- Button の On Click () から public メソッドを呼んだ
- ゲーム中にラベル文字列を更新できた
11🚀次のステージへ
- スライダーやトグルと値を束ねる(複数 UI を1つのPresenterにまとめる)
- 3D 入力と組み合わせる(クリック移動レッスン)
- Addressables で UI プレハブを動的ロードする(発展)
COMIC MODEキャラ対談で復習
配線まわりのひとこと。
🎮理解チェック(3問)
選択してから「正解を見る」で確認しましょう。
クイズ
Q1. 画面全体に UI を重ねて表示するとき、Canvas の Render Mode でよく使うのは?
クイズ
Q2. ボタンが押されたときに呼ぶメソッドを指定する UI は主にどこ?
クイズ
Q3. UI 用の TextMeshPro は通常どのコンポーネント名?
