メインコンテンツまでスキップ

ゲームUIを作る

ゲームにはUIが欠かせない。タイトル画面、体力バー、スコア表示、ポーズメニュー -- これらをUnityのuGUIシステムとAIとの会話で作っていこう。

前提条件

  • Unity が起動していて、OpenForge MCP と接続済みであること
  • ゲームシーンがあること(簡単なものでOK)

ステップ1: Canvasを作る

UnityのUI要素はすべてCanvas上に配置する。まずはCanvasを作ろう。

あなた:

UIのCanvasを作って。Screen Space - Overlayモードで、Reference Resolutionは1920x1080にして。Canvas ScalerのUI Scale ModeをScale With Screen Sizeにして

AIの動き: Canvasオブジェクトが作成される。Canvas ScalerのMatch値はデフォルトで0.5(幅と高さの中間)になるよ。

Canvas のレンダリングモード
  • Screen Space - Overlay: 常に画面の最前面に表示される。一般的なUI向き。
  • Screen Space - Camera: 特定のカメラに紐づく。カメラエフェクトの影響を受ける。
  • World Space: 3D空間内にUIを配置する。ゲーム内の掲示板やHPバーなど。

ステップ2: タイトル画面を作る

背景

あなた:

Canvas上にタイトル画面用の背景Imageを作って。Canvas全体を覆うサイズにして。色は暗い紺色で、少し透明度を付けて

AIの動き: 全画面の背景パネルが作成される。

タイトルテキスト

あなた:

画面の上半分中央に大きなタイトルテキストを置いて。テキストは「CLIFF WALKER」で、フォントサイズは72、色は白にして。Text Mesh Proを使って

AIの動き: TextMeshPro - Textコンポーネントが追加されて、タイトル文字が大きく表示される。

あなた:

タイトルテキストにドロップシャドウを付けて。影の色は黒で、オフセットは(2, -2)にして

AIの動き: TextMeshProのMaterial Presetやシャドウ設定が適用される。

ボタン

あなた:

タイトルテキストの下に「はじめから」「つづきから」「設定」の3つのボタンを縦に並べて。ボタンの間隔は20ピクセルにして。ボタンの色はダークグレーで、文字色は白、フォントサイズは28にして

AIの動き: 3つのButtonオブジェクトがVertical Layout Groupで縦に並べられる。

あなた:

ボタンにマウスオーバー時の色をライトグレーに、クリック時の色をオレンジに設定して

AIの動き: 各ボタンのColor Tintが設定されて、インタラクティブな見た目になる。

あなた:

タイトル画面のスクリーンショットを見せて

アンカーとピボット

UI要素の配置にはアンカー(Anchor)とピボット(Pivot)の理解が大事。

  • アンカー: 親要素のどの位置を基準にするか。画面中央に固定したい場合は(0.5, 0.5)に設定する。
  • ピボット: 要素自身のどの点を基準にするか。中央揃えなら(0.5, 0.5)。

あなた:

タイトルテキストのアンカーを画面上部中央にして。画面サイズが変わっても上部に固定されるようにして

こうすれば、異なる解像度でもレイアウトが崩れにくくなるよ。

ステップ3: HUD(ヘッドアップディスプレイ)を作る

ゲームプレイ中に常に表示される情報を作ろう。

体力バー

あなた:

画面の左上に体力バーを作って。背景は暗い赤、ゲージ部分は明るい赤にして。幅200ピクセル、高さ25ピクセルにして。アンカーは左上にして、余白は(20, -20)にして

AIの動き: 2つのImage(背景とゲージ)が重ねて配置される。ゲージ側のImage TypeをFilledにすることで、値に応じてバーの長さが変わるようになる。

あなた:

体力バーの上に「HP」というラベルテキストを小さく表示して。フォントサイズは14にして

AIの動き: 体力バーの上に小さなテキストが追加される。

スコア表示

あなた:

画面の右上に「Score: 0」というテキストを表示して。アンカーは右上にして。フォントサイズは24、色は白にして。右端から20ピクセルの余白を取って

AIの動き: 右上にスコアテキストが配置される。アンカーが右上なので、画面幅が変わっても右端に固定される。

ミニマップ用のプレースホルダー

あなた:

画面の右下にミニマップ用の枠を作って。150x150ピクセルの正方形にして。背景は半透明の黒にして。枠線は白で2ピクセルの太さにして。中に「MINIMAP」というプレースホルダーテキストを置いて

AIの動き: ミニマップ用の枠が右下に配置される。実際のミニマップ機能は後から実装できるように、まずは枠だけ用意しておく。

あなた:

HUDのスクリーンショットを見せて

レイアウトとアンカーの配置パターン

HUD要素の配置には定番パターンがある:

要素アンカー位置理由
体力バー左上プレイヤーが頻繁に確認する
スコア右上ゲーム進行状況を把握
ミニマップ右下視界の邪魔になりにくい
アイテム欄下中央操作UIは下に集約

これらは慣習的なもので、ゲームの種類に合わせて変えてOK。

ステップ4: ポーズメニューを作る

ゲーム中にESCキーで表示されるポーズメニューを作ろう。

暗転パネル

あなた:

ポーズメニュー用のパネルを作って。Canvas全体を覆う半透明の黒(アルファ0.7)にして。名前は「PausePanel」にして。最初は非アクティブにしておいて

AIの動き: 暗転用のImageが作成されて、非アクティブ状態(非表示)に設定される。

メニュー本体

あなた:

PausePanelの子オブジェクトとして、画面中央にメニューパネルを作って。サイズは400x300ピクセル、背景色はダークグレーにして。角を丸くして

AIの動き: 中央にメニューパネルが配置される。

あなた:

メニューパネルの上部に「PAUSE」というテキストを置いて。フォントサイズは36、色は白にして

あなた:

その下に「ゲームに戻る」「設定」「タイトルに戻る」の3つのボタンを縦に並べて。タイトル画面と同じスタイルにして

AIの動き: ポーズメニューの3つのボタンが追加される。

表示・非表示のスクリプト

あなた:

ESCキーを押したらPausePanelの表示・非表示を切り替えるスクリプトを作って。ポーズ中はTime.timeScaleを0にしてゲームを一時停止して、再開時は1に戻して

AIの動き: PauseManagerスクリプトが生成されて、Canvasまたは空のGameObjectにアタッチされる。

あなた:

ポーズメニューを表示した状態のスクリーンショットを見せて

Time.timeScale の注意

Time.timeScaleを0にすると、物理演算やTime.deltaTimeベースの処理がすべて停止する。UIアニメーションなどポーズ中も動かしたい処理は、Time.unscaledDeltaTimeを使う必要があるよ。

ステップ5: レイアウトの調整

異なる画面サイズでUIが崩れないように、レイアウトを調整しよう。

あなた:

16:9と4:3の両方のアスペクト比でスクリーンショットを見せて。UIが崩れていないか確認したい

AIの動き: 異なるアスペクト比でのスクリーンショットが返ってくる。崩れている箇所があれば修正を頼もう。

あなた:

4:3だとボタンが画面からはみ出している。アンカーを調整して、どのアスペクト比でも収まるようにして

AIの動き: アンカーとオフセットが調整されて、異なる画面サイズでもレイアウトが崩れなくなる。

レスポンシブUIのコツ
  • ピクセル単位の固定値はできるだけ避け、アンカーによる相対配置を使う
  • Canvas ScalerのMatchを0.5にすると、幅と高さの変化をバランスよく吸収してくれる
  • Layout GroupコンポーネントやContent Size Fitterを使うと、中身に応じて自動でサイズ調整される

ステップ6: UIの遷移アニメーション

UIの表示・非表示に簡単なアニメーションを付けて、見栄えを良くしよう。

あなた:

ポーズメニューが表示されるとき、フェードインするようにして。0.3秒かけてアルファが0から1になるアニメーションにして

AIの動き: CanvasGroupコンポーネントが追加されて、アルファ値をアニメーションさせるスクリプトまたはAnimatorが設定される。

あなた:

タイトル画面のボタンも、画面が表示されたとき下からスライドインするようにして

AIの動き: ボタンの位置アニメーションが追加される。

まとめ

このチュートリアルで学んだこと:

  1. Canvas -- UIの基盤となるCanvasの作成と設定
  2. タイトル画面 -- 背景、テキスト、ボタンの配置
  3. HUD -- 体力バー、スコア、ミニマップ枠の配置
  4. ポーズメニュー -- 暗転パネル、メニューボタン、一時停止処理
  5. アンカーとレイアウト -- 画面サイズに対応するレスポンシブな配置
  6. UIアニメーション -- フェードインやスライドインで見栄えを向上

UIはプレイヤーがゲームと対話する接点。見た目だけでなく、使い勝手も大事な要素だよ。AIに「このボタンもう少し大きくして」「間隔を詰めて」と気軽に頼みながら、触り心地の良いUIを目指そう。