本文へスキップ
🎮

🖱️ Unity ハンズオン · uGUI

UnityでUIボタンを押したらテキストが変わる — uGUI はじめの一歩

Canvas と Button、TextMeshPro を Inspector でつなぐ。コードは「public メソッドを1つ」から。

ゴールは「Game ビューでボタンを押すたびに、ラベル文字が書き換わる」こと。 アニメーションや複雑なレイアウトは扱わず、イベントの配線に集中します。

自己紹介

ココ先生(講師)・喜ぶ
ココ先生やさしい講師
UI は見た目のパーツが多いけれど、「誰が・どのタイミングで・何を呼ぶか」だけ先に押さえると迷子になりにくいです。
はじめちゃん(学習者)・笑う
はじめちゃんUnity習い始めたて
ボタンは作れるけど C# との接続が不安です。クリックの友達になりたい!

オープニング対談

ココ先生(講師)・楽しむ
ココ先生今日はコードより『配線』の日! Button の下の On Click () に、スクリプトのメソッドを指さしてあげるだけで動くよ。
はじめちゃん(学習者)・驚く
はじめちゃんえ、そこまでドラッグするだけ? 魔法みたい…
ココ先生(講師)・喜ぶ
ココ先生魔法じゃなくて Unity のイベント仕組みだね。あとでキーボード入力とくっつけるときにも同じ考え方が効くよ ✨

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

  • 🖼️ Canvas の役割
  • 🔘 Button と On Click ()
  • 📝 TextMeshProUGUI
  • 🔗 [SerializeField] で参照
  • 📣 インスペクタ公開メソッドのつなぎ方
  • TextMeshPro パッケージの初回インポート

このページは Unity uGUI + TextMeshPro です。 UI Toolkit とは別系統です(どちらも現場で使われます)。

Unity 6 / 2022 LTS 系を想定。メニュー名は若干異なる場合があります。

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

Game 視点でクリックできるボタンを置き、押すたびに TextMeshPro の文字列を書き換えます。カウンタを 1 足す程度の短いロジックです。

こんな人向け

3D オブジェクトのチュートリアルは終えたが、メニューや HUD の入口を知りたい方。UI の用語に慣れておくとゲーム全体の設計が楽になります。

2🎬流れをつかむ

下図は「画面 → スクリプト → インスペクタ配線 → 再生」の流れです。

Canvas と Button、スクリプト、Inspector の On Click、再生のフロー図
配線の全体像:UI 配置 → 参照を Serialize → On Click で public メソッドを指定
TMP 初回Import
CanvasUI 親
Button + TMP子オブジェクト
ScriptSerialize
On ClickInspector
Playクリック

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

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

🖼️
Canvas UI の土台

画面座標系で UI を載せるルート。Render Mode は最初 Screen Space - Overlay で問題ないことが多いです。

🔘
Button + Image

クリック領域。子に Text (TMP) を置けばラベル付きボタンになります。

📝
TextMeshProUGUI

ふちどりのきれいな UI テキスト。using TMPro;.text プロパティで更新します。

EventSystem

UI の入力を橋渡し。Canvas 作成時に自動で置かれることが多いです。無いとボタンが反応しません。

🎛️
On Click ()

Inspector 上のイベントリスト。オブジェクトシグネチャなし public メソッドを指定します。

🧷
SerializeField

private フィールドでも Inspector に出せる。Text 参照をドラッグで渡しておくと楽です。

4🧱TMP の準備とヒエラルキー

初めて TextMeshPro を使うプロジェクトでは、メニューから Window → TextMeshPro → Import TMP Essential Resources(表記はバージョンで多少異なる)を実行しておくと安全です。

Canvas の下に Button と Text、別オブジェクトにロジック用スクリプトを置く例
一例:ロジック用の空オブジェクトを分け、Button の On Click からそこを狙う
  1. ヒエラルキーで右クリック → UI → Canvas(EventSystem も自動生成されることが多い)
  2. Canvas 下に UI → Button - TextMeshPro を作成(自動で Text 子が付く場合あり)
  3. 同じく Canvas 下に UI → Text - TextMeshPro を追加し、名前を StatusLabel などに
  4. 空の GameObject を作成し UiClickCounter を付ける場所に(後でスクリプトを載せます)

5📎スクリプト UiClickCounter.cs

AssetsCreate → C# Script。クラス名とファイル名を UiClickCounter にそろえます。

UiClickCounter.cs
C#
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 でドラッグ割り当てします。
  • OnButtonPressedpublic かつ引数なしである必要があります(この形が Button イベントから選びやすい)。
  • clicks … 状態をフィールドに持ち、クリックのたびに増やして文字列へ反映しています。

7Inspector での配線

  1. UiClickCounter をアタッチした GameObject を選択し、Status Text 欄に StatusLabel(TextMeshProUGUI)をドラッグ。
  2. Button オブジェクトを選択。Button コンポーネントの On Click ()+ を押す。
  3. 出てきたスロットに UiClickCounter が付いた GameObject をドラッグ。
  4. 右の関数ドロップダウンから UiClickCounter → OnButtonPressed を選択。
  5. Play し、Game ビューでボタンをクリック。ラベルが更新されれば完了。

8動作確認チャレンジ

  • ボタンの子 Text と StatusLabel を別々にして、見た目を整理してみる
  • メソッドをもう1つ増やし、On Click に複数エントリを登録して連続で呼ぶ(リセット用など)
  • 前レッスンの回転スクリプトと同じシーンに UI を足してもよい(レイアウトに注意)

9🩹つまずきポイント

  • ボタンが反応しない … EventSystem がシーンにあるか、Button の interactable、 前面に他 UI が被っていないか確認。
  • On Click にメソッドが出ないpublic か、引数なしか、スクリプトにコンパイルエラーがないか確認。
  • NullReferenceExceptionstatusText を Inspector で割り当て忘れていないか。
  • テキストが豆腐になる … TMP のフォールバックフォントや Import が必要な場合があります。

10🏆まとめ

  • Canvas / Button / TextMeshProUGUI を配置した
  • SerializeField でテキスト参照を渡した
  • Button の On Click () から public メソッドを呼んだ
  • ゲーム中にラベル文字列を更新できた

11🚀次のステージへ

COMIC MODEキャラ対談で復習

配線まわりのひとこと。

はじめちゃん(学習者)・混乱
はじめちゃんOn Click に飛ばすメソッド、名前なんでもいいんですか?
ココ先生(講師)・笑う
ココ先生ルールさえ守ればOK。今回みたいに public で引数なしにしておくと、ドロップダウンから選びやすいよ。
はじめちゃん(学習者)・喜ぶ
はじめちゃんじゃあ OnCatButton とか付けても…?
ココ先生(講師)・楽しむ
ココ先生うん、チームで通じる名前ならアリ。チュートリアルは分かりやすさ優先で OnButtonPressed にしておこう!

🎮理解チェック(3問)

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

1

クイズ

Q1. 画面全体に UI を重ねて表示するとき、Canvas の Render Mode でよく使うのは?

2

クイズ

Q2. ボタンが押されたときに呼ぶメソッドを指定する UI は主にどこ?

3

クイズ

Q3. UI 用の TextMeshPro は通常どのコンポーネント名?