UnityでUIを作っていると、こんな経験はありませんか?
- Canvasを置いたのにUIが表示されない
- Buttonを押しても何も起きない
- TextMeshProで日本語が□になってしまう
- エディタでは正常なのにビルドすると崩れる
私もUnityを始めた頃は、UI関連のトラブルで何時間も悩んだことがありました。
特に厄介なのは、エラーメッセージが出ないケースが多いことです。スクリプトに問題があると思って調べ続けた結果、実はCanvasの設定ミスだった……ということも珍しくありません。
また、UIの不具合は複数の仕組みが関係しているため、原因を間違えて探し始めると解決まで遠回りになりがちです。
表示されない問題はCanvasやAnchorが関係していることが多く、クリックできない問題はEventSystemやRaycast設定が関係していることがあります。さらに日本語の文字化けはTextMeshPro独自のフォント設定が原因になるケースが少なくありません。
こうしたUIトラブルは一見バラバラに見えますが、症状ごとに確認する場所を整理すると意外と早く解決できます。
UIが見えない、押せない、文字が表示されない――そんな状況で原因の切り分けに困っている場合は、順番に確認していきましょう。
Unity UIが表示されない時の結論チェックリスト
UIが表示されない場合、最初から細かい設定を1つずつ調べるよりも、発生頻度の高い原因から順番に確認した方が早く解決できます。
私の経験でも、UIが表示されない原因の多くはCanvasやCamera周りの設定ミスでした。スクリプトの不具合を疑う前に、まずは次の項目を確認してみてください。
まず確認するべき原因5選
- Canvas Render Modeが適切か
Screen Space – CameraやWorld Spaceでは設定不足によって表示されないことがあります。 - Render Cameraが設定されているか
Screen Space – Cameraを使用している場合、Cameraが未設定だとUIは表示されません。 - Canvas Scalerが正しく設定されているか
解像度によってUIが画面外へ移動している場合があります。 - Anchor設定が適切か
アンカーの位置によっては、画面サイズ変更時にUIが見えなくなることがあります。 - LayerやCulling Maskに問題がないか
カメラがUIレイヤーを描画対象から除外しているケースがあります。
特に初心者の方は「Hierarchyに存在しているから表示されるはず」と考えがちですが、Unityではオブジェクトが存在していても描画条件を満たしていなければ表示されません。
まずはCanvasとCameraの設定を確認するだけでも、かなりの割合で原因を絞り込めます。
症状別に原因を切り分ける方法
| 症状 | 優先的に確認する場所 |
|---|---|
| エディタでは見えるがビルドで消える | Canvas設定、Layer、EditorOnlyタグ |
| 解像度変更で消える | Canvas Scaler、Anchor |
| 一部のUIだけ見えない | RectTransform、親子関係、表示順 |
| World Space UIだけ見えない | Camera位置、Canvas距離 |
例えば、ゲームビューの解像度を変更した瞬間にUIが消える場合は、Canvas ScalerやAnchorの設定を疑うべきです。
一方で、エディタ上では正常なのにビルド後だけ表示されない場合は、Layerやタグ設定などビルド環境で影響を受ける部分を優先的に確認すると効率的です。

UIトラブルはやみくもに調べるより、「どの症状が出ているか」を基準に原因を絞り込む方が圧倒的に早く解決できます。
Unity UIが表示されない原因と対処法
UIが表示されない場合は、Canvasの描画設定から確認するのが近道です。
「Hierarchyには存在している」「Gameビューには何も映らない」という状態なら、UIオブジェクトそのものではなく、描画の仕組みに問題があるケースが少なくありません。
Canvas Render Modeが原因の場合
Canvasには主に3つのRender Modeがあります。
| Render Mode | 特徴 |
|---|---|
| Screen Space – Overlay | 画面の最前面に表示される |
| Screen Space – Camera | 指定したCamera経由で表示される |
| World Space | 3Dオブジェクトとして配置される |
初心者の場合は、まず「Screen Space – Overlay」を使うのがおすすめです。
Screen Space – CameraやWorld Spaceは柔軟性が高い反面、Camera設定や配置ミスによって表示されなくなることがあります。
UIが見えなくなった場合は、現在のRender Modeを確認し、意図しない設定になっていないか見直してみましょう。
Render Camera未設定で表示されない場合
Screen Space – Cameraを使用している場合は、Canvasの「Render Camera」にCameraを設定する必要があります。
この項目が空欄だと、UIをどのCameraで描画するのかUnityが判断できず、結果として表示されなくなります。
特に以下のようなケースで発生しやすいです。
- Cameraを削除した
- Prefab化したCanvasを別シーンへ配置した
- Main Cameraを作り直した
Render ModeがScreen Space – Cameraになっている場合は、Render Camera欄が正しく設定されているか確認してください。
Canvas Scaler設定で崩れる場合
解像度を変更した瞬間にUIが消えたり、画面外へ移動したりする場合はCanvas Scalerの設定を確認します。
多くのゲームでは「Scale With Screen Size」が使用されています。
例えば1920×1080で作業していても、スマホやタブレットでは画面サイズが大きく異なります。
Canvas Scalerが適切に設定されていないと、ボタンやテキストが予想外の位置へ移動することがあります。
複数の解像度でGameビューを切り替えながら確認すると、問題を発見しやすくなります。
Anchor設定で画面外へ移動する場合
Anchorは「画面のどこを基準にUIを配置するか」を決める仕組みです。
例えば右上に配置したつもりでも、Anchorが中央になっていると解像度変更時に位置が大きくずれてしまいます。
よくある失敗例として次のようなものがあります。
- 右上ボタンなのに中央Anchorになっている
- 画面下メニューなのに左上Anchorになっている
- Stretch設定が意図せず有効になっている
UIが特定の解像度でのみ消える場合は、RectTransformのAnchor Presetsを見直してみましょう。
LayerとCulling Maskが原因の場合
Cameraには「どのLayerを描画するか」を制御するCulling Maskがあります。
UIオブジェクトが配置されているLayerが除外されていると、オブジェクト自体は存在していても表示されません。
特に複数Cameraを使用しているプロジェクトでは発生しやすい問題です。
Layerについて詳しく知りたい場合は、こちらの記事も参考になります。
また、タグが「EditorOnly」になっているオブジェクトはビルド時に除外されます。

エディタでは表示されるのにビルド後だけ消える場合は、タグ設定も確認しておくと安心です。
Unity Buttonが反応しない時の対処法
ボタンがクリックできない場合は、Buttonコンポーネントそのものよりも「クリック情報がボタンまで届いているか」を確認することが重要です。
私も最初の頃はOnClickの設定ばかり見直していましたが、実際にはEventSystemやRaycast設定が原因だったことが何度もありました。
特にUIは複数のコンポーネントが連携して動いているため、どこか1か所でも設定が欠けると反応しなくなります。
EventSystemが存在するか確認する
UnityのUIはEventSystemが入力を管理しています。
シーン内にEventSystemが存在しない場合、ButtonだけでなくDropdownやToggleなども反応しなくなります。
Hierarchyで「EventSystem」を検索し、存在しているか確認しましょう。
シーンを追加読み込みしているプロジェクトでは、意図せず削除されたり重複したりすることもあります。
まず最初に確認したい項目です。
Graphic Raycasterが付いているか確認する
クリック判定はCanvasに付いているGraphic Raycasterが担当しています。
このコンポーネントが無効化されていたり削除されていたりすると、UIは表示されていてもクリックできません。
確認手順は簡単です。
- Canvasを選択する
- Inspectorを開く
- Graphic Raycasterが存在するか確認する
- チェックボックスが有効になっているか確認する
UIが全体的に反応しない場合は、まずここを疑うと効率的です。
Raycast Targetがクリックを邪魔していないか確認する
Buttonが見えているのに押せない場合、透明なUIが手前でクリックを奪っていることがあります。
これはUnityのUIトラブルの中でも非常によくあるパターンです。
例えば次のようなケースです。
- 透明なImageを全画面に配置している
- 背景Panelを重ねている
- 演出用のUIが前面に残っている
Imageコンポーネントには「Raycast Target」という項目があります。
クリック判定が不要な背景画像や装飾画像は、このチェックを外しておくとトラブルを防ぎやすくなります。
透明度を0にしてもRaycastは有効なままなので注意しましょう。
Canvas Groupが入力をブロックしていないか確認する
親オブジェクトにCanvas Groupが付いている場合、その設定が子UI全体へ影響します。
特に次の2項目は要確認です。
- Interactable
- Blocks Raycasts
Blocks Raycastsがオフになっていると、見た目は表示されていてもクリックできません。
また、Interactableがオフになっている場合はボタン操作自体が無効になります。
UIをフェード表示する演出を作った後に反応しなくなる場合は、Canvas Groupが原因になっていることがあります。
ButtonのInteractableとOnClickを確認する
ここまで問題がなければ、最後にButton自身の設定を確認します。
まずInteractableがオフになっていないか確認しましょう。
オフの場合は通常グレーアウト表示になります。
次にOnClickイベントを確認します。
- 対象オブジェクトが登録されているか
- 関数が正しく選択されているか
- スクリプトにエラーが発生していないか
ボタンが押された見た目になるのに処理だけ実行されない場合は、OnClick設定やスクリプト側を疑うのが近道です。
判断の目安
- ボタンがハイライトしない → EventSystemやRaycast設定を確認
- ハイライトするが押せない → Button設定を確認
- 押せるが処理が動かない → OnClickやスクリプトを確認
より詳しいチェック項目を知りたい場合は、こちらの記事も参考になります。
TextMeshProの日本語文字化けを直す方法
TextMeshProで日本語を入力した際に、「□□□□」のような四角い記号が表示された経験はありませんか?
Unity初心者がよく「フォントを日本語フォントに変更したのに直らない」と悩むポイントですが、実はTextMeshProでは通常のフォント設定だけでは日本語を表示できません。
原因を理解すると解決はそれほど難しくありません。
□(豆腐)が表示される原因
TextMeshProでは、Font Assetと呼ばれる専用の文字データを使用して描画を行います。
そのため、使用しているFont Assetの中に対象の文字が存在しない場合、文字を描画できず□(通称「豆腐」)として表示されます。
例えば次のようなケースです。
- 英数字のみで生成されたFont Assetを使っている
- 日本語フォントを設定したがFont Assetを再生成していない
- 一部の漢字だけFont Assetに含まれていない
単純にフォントファイル(ttfやotf)を入れただけでは解決しない点が、初心者が混乱しやすいポイントです。
Static Font Assetで解決する方法
もっとも安定した方法は、日本語を含んだFont Assetを作成することです。
手順は次の流れになります。
- 日本語対応フォントをプロジェクトへインポートする
- Window → TextMeshPro → Font Asset Creatorを開く
- Source Font Fileにフォントを指定する
- 必要な文字を登録する
- Generate Font Atlasを実行する
- Font Assetを保存する
Static Font Assetは事前に必要な文字を登録しておく方式です。
実行時に文字生成が発生しないため、パフォーマンス面では有利です。
ゲーム内で使用する文字がある程度決まっている場合はこちらが向いています。
Dynamic Font Assetで解決する方法
最近のUnityプロジェクトでは、Dynamic Font Assetを利用するケースも増えています。
Dynamicに設定すると、実際に使用された文字を実行時に自動生成してFont Atlasへ追加できます。
Dynamicを使うべきケース
- チャット機能がある
- プレイヤー名入力がある
- 多言語対応を予定している
- 使用文字を事前に把握できない
Dynamicを避けた方がいいケース
- モバイル端末向けで負荷を抑えたい
- 使用文字が固定されている
- パフォーマンスを優先したい
万能に見えるDynamicですが、実行時に文字生成処理が発生するため、用途に応じた使い分けが大切です。
Fallback Fontを設定する方法
一つのFont Assetですべての文字を管理するのが難しい場合は、Fallback Fontを利用できます。
これは「メインフォントに文字がなかったら別のフォントを探す」という仕組みです。
例えば次のような構成が可能です。
- メイン:英数字フォント
- Fallback:日本語フォント
- Fallback:絵文字フォント
また、TMP Settingsからプロジェクト全体で共通利用するFallback Fontを設定することもできます。
UIが多いプロジェクトでは管理が楽になるためおすすめです。
Static・Dynamic・Fallback比較
| 項目 | Static | Dynamic | Fallback |
|---|---|---|---|
| 導入難易度 | 中 | 低 | 中 |
| 実行時負荷 | 低 | やや高い | 中 |
| 大量文字対応 | △ | ○ | ○ |
| 管理しやすさ | ○ | ○ | △ |
ゲーム開発では「Staticを基本にして、不足分をFallbackで補う」という構成が採用されることも少なくありません。
もし一部の漢字だけ表示されない場合は、まずFont Assetにその文字が含まれているか確認してみてください。
より詳しい原因や対処法については、こちらの記事も参考になります。
Text Animator for Unity
✅アセットストアでチェックする
3分でできるUnity UIトラブル診断チェックリスト
UIトラブルは原因を1つずつ調べ始めると時間がかかります。
そんな時は、発生している症状ごとに確認箇所を絞り込むのがおすすめです。
私も実際の開発では、この順番で確認することが多いです。上から順に見ていけば、多くの問題は数分で原因を特定できます。
UIが表示されない場合
- Canvasが有効になっているか確認する
- Canvas Render Modeを確認する
- Screen Space – Cameraの場合はRender Cameraを確認する
- Canvas Scaler設定を確認する
- Anchor設定を確認する
- LayerとCulling Maskを確認する
- GameObjectが非アクティブになっていないか確認する
特にRender Camera未設定とAnchor設定ミスは発生頻度が高めです。
Buttonが反応しない場合
- EventSystemが存在するか確認する
- CanvasにGraphic Raycasterが付いているか確認する
- 透明Imageが重なっていないか確認する
- Raycast Targetを確認する
- Canvas Group設定を確認する
- ButtonのInteractableを確認する
- OnClickイベントを確認する
「ボタンが押せない」と思っていても、実際には透明なUIがクリックを奪っているだけというケースは珍しくありません。
日本語が表示されない場合
- TextMeshProを使用しているか確認する
- 日本語対応フォントをインポートしているか確認する
- Font Assetを生成しているか確認する
- 対象文字がFont Assetに含まれているか確認する
- Fallback Fontを設定しているか確認する
- Dynamic設定を利用する必要がないか確認する
一部の漢字だけ表示されない場合は、Font Asset不足の可能性が高いです。
ビルド後だけ壊れる場合
- EditorOnlyタグが付いていないか確認する
- Sceneに必要なオブジェクトが含まれているか確認する
- Font Assetがビルド対象に含まれているか確認する
- Addressables利用時は読み込み設定を確認する
- 実機でエラーログを確認する
エディタでは正常なのにビルド後だけ問題が発生する場合は、描画設定だけでなくビルド設定も確認する必要があります。
詳しくは次の記事も参考になります。
このチェックリストで原因が見つからない場合は、「どの症状が出ているのか」をもう一度整理してみましょう。

UIが見えないのか、押せないのか、それとも文字だけおかしいのか。この切り分けができるだけで、調査時間はかなり短くなります。
Unity UIで初心者が勘違いしやすいポイント
UIトラブルが長引く原因の多くは、「違う場所を調べ続けていること」です。
実際には不具合そのものよりも、仕組みの勘違いによって原因特定が遠回りになるケースが少なくありません。
ここでは特に混同されやすいポイントを整理しておきましょう。
Canvasがあるだけでは表示保証にならない
初心者の方は「Canvasの中にUIがあるのだから表示されるはず」と考えがちです。
しかし実際には、Canvasが存在していても以下の条件によって表示されないことがあります。
- Render Camera未設定
- Canvas自体が非アクティブ
- World Spaceでカメラ外に配置されている
- Layer設定で描画対象外になっている
Hierarchyに存在していることと、実際に描画されることは別問題です。
Buttonの問題とRaycastの問題は別物
ボタンが押せないと、ついButtonコンポーネントを疑いたくなります。
ですが実際には、Buttonまでクリック情報が届いていないケースが非常に多いです。
例えば透明なImageが前面にある場合、Buttonは正常でもクリックを受け取れません。
そのため次の順番で考えるのがおすすめです。
- クリック情報が届いているか
- Buttonが入力を受け取れる状態か
- OnClick処理が正しく設定されているか
いきなりスクリプトを疑うより、まず入力経路を確認した方が早く解決できることが多いです。
日本語フォントを入れただけではTMPは表示できない
これも非常によくある勘違いです。
TextMeshProではフォントファイルそのものではなく、Font Assetを利用して描画を行います。
そのため日本語フォントをインポートしただけでは不十分です。
Font Assetを生成していなかったり、必要な文字が登録されていなかったりすると、文字化けや□表示が発生します。
「フォントは入れたのに表示されない」という場合は、Font Assetの設定を優先的に確認しましょう。
LayerとTagは役割が違う
LayerとTagを同じようなものだと思っている方も少なくありません。
それぞれ役割は大きく異なります。
| 機能 | 主な用途 |
|---|---|
| Layer | 描画・Raycast・衝突判定 |
| Tag | オブジェクト識別 |
UIが表示されない場合はTagよりもLayerの影響を受けるケースが多くなります。
透明Imageでもクリックを遮断する
透明度を0にしたImageは見えなくなりますが、クリック判定まで消えるわけではありません。
Raycast Targetが有効なままだと、透明な壁のように入力を遮断します。
これはUI演出を作った後によく発生します。
例えばフェード演出用のImageを残したままにすると、見た目は何もないのにボタンが押せなくなることがあります。

クリック判定が不要なImageや装飾用UIは、Raycast Targetをオフにする習慣を付けておくとトラブルを防ぎやすくなります。
Unity UIトラブルを再発させないコツ
UIの不具合は一度解決しても、別の画面や別のシーンで同じ問題が再発することがあります。
私自身も開発初期は「またButtonが押せなくなった」「また日本語が表示されない」という状況を何度も経験しました。
ただ、いくつかのルールを決めておくだけで、UIトラブルの発生率はかなり下げられます。
UI作成直後に必ず確認する項目
新しいUIを作成したら、最低でも次の項目を確認しておくのがおすすめです。
- CanvasのRender Mode
- Canvas Scalerの設定
- EventSystemの存在
- Graphic Raycasterの有効化
- Anchor設定
UIが完成してから確認するより、作成直後に確認する方が修正コストは圧倒的に小さくなります。
特に複数人で開発している場合は、チーム共通のチェック項目として運用すると効果的です。
TMPフォントは最初に統一する
TextMeshPro関連のトラブルは、プロジェクト内でフォント管理が統一されていない時に発生しやすくなります。
例えば画面ごとに異なるFont Assetを使っていると、ある画面では表示できる漢字が別の画面では表示できないことがあります。
そのため、開発初期の段階で次のようなルールを決めておくと管理しやすくなります。
- 標準Font Assetを決める
- Fallback Fontを共通化する
- Dynamic利用の有無を決める
後から統一しようとすると修正箇所が増えるため、早めの整備がおすすめです。
解像度テストを早めに行う
UI配置の問題は、開発終盤になって初めて発見されることがあります。
1920×1080だけで確認していると、スマホやタブレット向けにビルドした際にレイアウトが崩れるケースも珍しくありません。
Gameビューの解像度を切り替えながら定期的に確認する習慣を付けておくと、AnchorやCanvas Scalerの問題を早期発見できます。
ビルド確認を後回しにしない
Unityではエディタ上では正常でも、ビルド後に問題が発生することがあります。
例えば次のようなケースです。
- EditorOnlyタグが付いていた
- Font Assetが不足していた
- Addressables設定が漏れていた
- 実機解像度でUIが崩れた
機能が完成してからまとめてビルドするより、節目ごとに実機確認する方がトラブルを小さいうちに発見できます。
UIは見た目の問題が多いため、エディタだけで判断しないことも大切です。
UI Particle Image
✅アセットストアでチェックする
Unityの教科書 Unity 6完全対応版
✅ Amazonでチェックする|✅ 楽天でチェックする
まとめ
UnityのUIトラブルは一見すると原因が分かりにくいですが、多くの場合は確認する場所がある程度決まっています。
今回紹介した内容を整理すると、まず確認したいポイントは次の3つです。
- UIが表示されない → Canvas・Camera・Anchorを確認する
- Buttonが反応しない → EventSystem・Raycast関連を確認する
- 日本語が表示されない → TextMeshProのFont Assetを確認する
特に初心者の頃は、スクリプトの問題だと思って何時間もコードを見直してしまうことがあります。
しかし実際には、Canvas設定やRaycast Targetなど、インスペクタ上の設定が原因になっているケースも少なくありません。
私がUIトラブルを調査する時は、まず次の順番で確認しています。
- Canvas設定
- EventSystemとGraphic Raycaster
- TextMeshPro Font Asset
この順番で確認するだけでも、多くのUI不具合は短時間で原因を絞り込めます。
また、UIが完成してからまとめて確認するのではなく、機能を追加するたびに解像度テストやビルド確認を行うと、後から大きな修正が発生しにくくなります。
UIはプレイヤーが最も長く触れる部分です。
だからこそ、トラブルが起きた時は慌てて設定を変更するのではなく、「表示」「入力」「文字表示」のどこに問題があるのかを切り分けながら確認していくことが大切です。
Modern UI Pack
✅アセットストアでチェックする
よくある質問(FAQ)
- QUnityでUIがエディタでは見えるのにビルド後だけ消えるのはなぜ?
- A
ビルド後だけUIが消える場合は、Canvas設定だけでなくビルド環境特有の問題を疑う必要があります。
よくある原因としては次のようなものがあります。
- オブジェクトにEditorOnlyタグが付いている
- 使用しているシーンがBuild Settingsへ登録されていない
- Font Assetが正しく参照されていない
- Addressablesの設定に問題がある
- 実機解像度でUIが画面外へ移動している
特に初心者の方は、Gameビューの解像度だけで確認してしまうことがあります。しかし実際の端末では画面比率が異なるため、Anchor設定の問題が初めて表面化することも少なくありません。
まずは開発ビルド(Development Build)で実行し、コンソールログや実機での表示状態を確認してみましょう。
- QTextMeshProで一部の漢字だけ表示されないのはなぜ?
- A
一部の漢字だけが□になったり空白になったりする場合は、その文字が現在使用しているFont Assetに含まれていない可能性が高いです。
例えば「学校」は表示できるのに、「髙」「﨑」などの環境依存文字や異体字だけ表示できないケースがあります。
この場合は次の項目を確認してみてください。
- Font Assetに対象文字が登録されているか
- Font Asset生成時の文字セットが不足していないか
- Fallback Fontが設定されているか
- Dynamic Font Assetを利用した方が適切なケースではないか
特にプレイヤー名入力やチャット機能があるゲームでは、事前にすべての文字を登録するのが難しい場合があります。
そのようなケースではDynamic Font AssetやFallback Fontを活用すると対応しやすくなります。
また、日本語フォントによって収録されている文字数が異なるため、フォントそのものを変更することで解決する場合もあります。
- QButtonがハイライトするのにクリック処理が動かないのはなぜ?
- A
ボタンがハイライトしたり押し込みアニメーションが再生されたりする場合は、クリック判定そのものは正常に動作しています。
そのため、この状態ではRaycastやEventSystemよりも、OnClickイベントやスクリプト側の問題を疑うべきです。
まずは次の項目を確認してみましょう。
- OnClick()に対象の関数が登録されているか
- 登録先のオブジェクトが削除されていないか
- 対象スクリプトでコンパイルエラーが発生していないか
- 関数のアクセス修飾子がpublicになっているか
- 関数名を変更した後に再登録が必要になっていないか
例えば、スクリプトを修正して関数名を変更した場合、インスペクタ上では設定が残っているように見えても参照切れになっていることがあります。
また、NullReferenceExceptionなどの例外が発生している場合も、ボタンは押せるのに処理だけ実行されない状態になります。
判断の目安としては、「見た目の反応があるなら入力系は正常」と考えると切り分けしやすくなります。
この場合はConsoleウィンドウを開き、エラーメッセージが出ていないか確認するのがおすすめです。










※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。