← ブログへ

ゲームUIのSafe Areaと実機QA:デバッグ順序とPrefab修正

Unity Editorは正常だが実機でノッチにHUDが食い込む、または見た目とタップ位置がずれるときの失敗分類、Canvas ScalerとScreen.safeAreaの切り分け、Prefab修正とStudio再エクスポートの判断。

公開日
  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • safe-area
  • unity
  • godot
  • cocos
  • vberai
  • qa
  • 2026
ゲームUIのSafe Areaと実機QA:デバッグ順序とPrefab修正

最も多い報告は、Gameビューでは問題ないのに、縦長端末ではHUDがノッチ下に入る、またはボタンは押せそうに見えるがヒットしないというものです。Safe Areaは「Anchorを少し動かす」話ではなく、ルートCanvasの方針、フルブリード背景とインセット付きコンテンツの分離、実行時safeAreaがチャネルと一致するかがセットです。Editorで再現できるログと実機スモークの両方が必要です。

失敗の分類、Unity UGUIのデバッグ順序、Prefab修正の原則、チャネル/ミニゲームの注意点を扱います。デザインハンドオフ項目7のセーフゾーン指定は文末「デザインが渡すもの」に要約します。出荷前項目1の実機範囲をここで具体化し、エンジン+MCPチェックリストのRaycast/初回Playは繰り返しません。

Godot / Cocos: DisplayServer.get_display_safe_area()/各エンジンのSafeAreaウィジェットに対応。手順の順序はUnityと同型です。

不合格基準(いずれか1つ): 主フローの可読UIや必須ボタンがノッチ・ホームインジケータ・角丸に隠れる;見た目とヒット領域のずれが明らか;Editor 16:9のみで目標アスペクトの実機未検証;DevとReleaseでSafe Area挙動が異なり仕様なし。


まず分類:クリップ、オフセット、背景のみ

症状第一嫌疑エンジニアの最初の一手
視覚クリップ(ノッチ内に文字・アイコン)コンテンツ未インセット;ルートを全画面扱いsafeAreaとコンテンツRectの交差を確認
タップオフセットCanvasスケール、複数Canvas、カメラ不一致EventSystemレイキャストとrenderMode
背景のみ切れ、ボタンOK意図的フルブリード+コンテンツインセット仕様許可なら不合格にしない
回転後にずれorientation/safeArea変更未監視回転後にインセット再計算
特定チャネルビルドのみSDKがsafeAreaや解像度を変更そのビルドをスモーク;汎用Androidのみ不可

ノッチクリップと正しいインセット

見た目とヒット領域のずれ


Unity UGUI:推奨デバッグ順序(6ステップ)

1. 再現条件を固定

端末、OS、Dev/Release、向き、Gameビュー解像度を記録。出荷前項目5でDev/Release各々メインHUD。

2. safeAreaと参照解像度をログ

メインUI表示後に Screen.width/height、Screen.safeArea、Display.cutouts(Android 11+)を出力。

読み方: safeAreaが画面より小さい→コンテンツインセット必須。EditorではsafeArea=全画面になりがち→実機の代替にならない。

3. CanvasルートとCanvas Scaler

確認典型ミス修正方向
ルートRender ModeScreen SpaceとCamera UI混在UIモードを統一
Canvas ScalerReference Resolutionが縦基準と不一致エンジン項目1に合わせる
Match縦長でスケール・端ウィジェットが driftMatch方針を合意;SceneだけでなくPrefab修正
複数Canvasヒットが別レイヤーへsortingOrderとRaycast対象を一致

4. レイヤー:フルブリード背景 vs セーフコンテンツ

Canvas
├── Background_FullBleed   (全アンカー、ノッチ可、入力なし)
└── SafeRoot               (Safe AreaコンポーネントまたはsafeAreaパディング)
    ├── HUD_Content
    └── Popups

Background_FullBleedとSafeRootの层级

Unity Safe Area(またはScreen.safeAreaでoffsetMin/Maxを設定)。インセットなし全画面ストレッチのクリックボタンは不可。

Studio一層エクスポートは 9-slice/構造化再エクスポート と キャンバス→Prefab を参照。

5. 実機タップ spot-check

主フロー重要ボタン3〜5個で視覚中心と指位置を比較。特定ポップアップのみずれ→ネストCanvas/二重Scaler。

6. リポジトリPrefabに反映

合格基準はバージョン管理Prefabに(出荷前項目6)。Anchor変更後は ロケールオーバーフロー スモーク。


チャネル/ミニゲーム

シナリオ注意
ネイティブAppScreen.safeArea+実機
一部ミニゲームコンテナのsafeArea API≠Editor
Androidカットアウトcutout≠safeAreaのことがある
PC等safeArea=全画面が多い

パターン: ISafeAreaProvider等でプラットフォーム注入;HUD Prefabに#ifを書かない。


修正ルーティング

症状原因対応担当
実機クリップ、Editor OKSafeRootなしレイヤー+Safe Area;実機再テストエンジニアリング
背景OK、ボタン切れBleed下にボタンSafeRootへ移動;Studio再エクスポートエンジニアリング+デザイン
タップずれ複数Canvas/ScalerCanvas統合/レイキャストカメラ統一エンジニアリング
解像度で driftAnchor固定のみエンジン項目6エンジニアリング
セーフ枠なし稿項目7不足デザインがnotch参照追加デザイン
Studio平坦エクスポートBG/HUD未分割インプレース分割エンジニアリング+デザイン

デザインが渡すもの

交付物エンジニア用途
目標解像度+セーフ参照(notch/ホームバー)Reference Resolutionとインセット期待
フルブリードとHUDのレイヤー名Background_*/SafeRoot
端Tabがセーフ内かAnchor方針

スクリプト不要—明確な指定でインセットpxの推測を減らす。


よくある質問

GameビューのiPhone解像度で足りる?
Devスモークのみ;出荷は目標実機必須(出荷前項目1)。

Safe Areaコンポーネント vs 手書きoffset?
チームで統一;手書きはsafeArea/向き変更で再計算。

Canvas Scalerだけでクリップ修正?
Scalerは全体スケール;インセットは別。クリップはコンテンツRectの問題。

MCP/Cursorは?
Prefab改名・Safe Area付与・Playスモーク向き;数値は実機ログ。エンジン+MCP。

Safe Areaと多言語爆框?
SafeRootを先に整え、ストレス言語を後で。

VberAI StudioとGoogle AI Studio?
別物。比較。

こちらの記事もおすすめです