この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: ミニマップを表示しポーンの位置を反映する方法
SEOタイトル: UE5 ミニマップ実装ガイド(Widget Blueprint / Render Transform / 座標変換)

この記事の要点
  • UE5 のミニマップは Widget Blueprint 上にマップ画像プレイヤーアイコンを重ねて作る
  • マップ素材: 真上から見下ろしレンダリングするか、外部の画像ソフトで作成してインポート
  • 位置反映の核は ワールド座標 ↔ 2D 座標の変換 — ワールドの 100 単位 = マップの X px のスケール変換
  • リアルタイム更新は Tick イベントで Render Transform を更新。重い場合は Timer (0.1 秒間隔) で代用
  • 応用: マップ自体を回転 (回転マップ) / 敵や目的地アイコンの動的追加 / ズーム機能

ミニマップとは

ミニマップは、ゲーム画面の端に表示される小さな地図 UI で、プレイヤーが現在位置や周辺環境を把握しやすくする要素です。オープンワールド、RPG、FPS、MOBA など、ジャンルを問わず採用される基本 UI です。

UE5 では UMG (Unreal Motion Graphics) の Widget Blueprint を使って実装するのが王道。本記事ではマップ素材の用意からポーン位置の反映、応用テクニックまでを解説します。

全体の流れ

  1. マップ用テクスチャを準備 (見下ろしレンダリング or 自作)
  2. Widget Blueprint を作成し、Image でマップを表示
  3. プレイヤーアイコン用の Image を重ねる
  4. Tick でポーンのワールド座標を取得し、2D 座標に変換してアイコンを移動
  5. HUD クラスやプレイヤーコントローラから Widget を画面に追加

1. マップ用テクスチャの準備

ミニマップに表示するベース画像を用意します。2 つの定番手法:

A. レベル全体を真上からレンダリング

  • レベル上空に Top-down Camera を配置し、レベル全体が映る位置・FOV に調整
  • Scene Capture Component 2D + Render Target で 1 枚キャプチャ → テクスチャとして保存
  • もしくはエディタの「High Res Screenshot」でビューポートを真上視点にして撮影

B. 外部ツールで自作

Photoshop / Krita / Figma 等でマップを作成 (シンボル化、デフォルメ化が可能)。PNG / TGA で保存し、コンテンツブラウザにドラッグ&ドロップ。

2. Widget Blueprint の作成

コンテンツブラウザで右クリック →「User Interface」→「Widget Blueprint」 (例: WBP_MiniMap)。

レイアウト構成

[Canvas Panel]
 ├ [Image] MapImage     ← マップのベース画像 (例: 200x200)
 └ [Image] PlayerIcon   ← プレイヤー位置アイコン (例: 16x16, ★や●)
  • MapImage: Anchors を Center / Position 0,0 / Size 200x200 程度
  • PlayerIcon: Is Variable をチェック (Blueprint からアクセスするため) / Anchors は中心 / Render Transform で位置を動かす

3. ポーンの位置をミニマップに反映

Widget Blueprint の Event Graph で Tick イベントから位置更新ロジックを組みます。

処理の擬似コード

EventTick (DeltaTime)
  ├ GetPlayerPawn → GetActorLocation → (X, Y, Z) ワールド座標
  ├ ワールド原点との差分 (WorldOffset = PlayerLocation - WorldCenter)
  ├ スケール変換: MapPos = WorldOffset * (MapSize / WorldSize)
  └ PlayerIcon → SetRenderTranslation(MapPos)

Blueprint で実装する場合のノード例

  • Get Player PawnGet Actor Location
  • Break Vector で X / Y を取り出す
  • 定数ノード WorldSize (例: 10000.0 = レベル全体が ±5000 cm 範囲) と MapSize (例: 200.0) を用意
  • (WorldX / WorldSize) * MapSize で X 軸の表示位置を算出 (Y も同様)
  • Set Render Translation ノードで PlayerIcon の位置を更新

注意: UE のワールド座標と UI のスクリーン座標は Y 軸が逆。Y 値はマイナスを乗じて反転する必要があります。

4. Widget を画面に表示

HUD クラスまたは PlayerController の BeginPlay で Widget を作成して画面に追加します。

// C++ の場合
void AMyPlayerController::BeginPlay()
{
    Super::BeginPlay();
    if (MiniMapWidgetClass) {
        MiniMapWidget = CreateWidget(this, MiniMapWidgetClass);
        if (MiniMapWidget) {
            MiniMapWidget->AddToViewport();
        }
    }
}

Blueprint 派なら PlayerController の BeginPlay で Create WidgetAdd to Viewport の 2 ノードでも同じことが可能です。

5. マップ自体を回転させる (回転マップ)

プレイヤーの向きにマップを追従させるタイプ (Skyrim 系) の実装は、マップ画像側を逆方向に回転させるのがポイント。

EventTick
  ├ GetControlRotation → Yaw 取得
  ├ -Yaw をマップの Render Transform Rotation にセット
  └ プレイヤーアイコンは常に中心 (回転しない)

6. 動的な敵 / 目的地アイコンを表示

敵やクエスト目的地のアイコンも、同じ仕組みで個別の Image を Render Translation で動かせます。複数表示する場合は動的生成がおすすめ。

動的生成のパターン

  • 新しい敵がスポーンしたら Create Widget でアイコン用 Widget を作成
  • ミニマップの Canvas Panel に Add Child to Canvas で追加
  • 配列で管理しておき、敵が倒れたら Remove from Parent で削除

パフォーマンスのコツ

テクニック効果
Tick の代わりに Timer (0.1 秒)毎フレーム更新は人間の目で違いが分からない
距離でアイコン表示を打ち切り視界外の敵を計算しない
Material を共有して Dynamic Instance 化アイコン数が多い場合に効果大
Render Target をマップ素材化Scene Capture を毎フレームではなく数秒ごとに

応用: 全画面マップ (M キーで開閉)

ミニマップを大きく表示する全画面モードはゲーム性向上に効果絶大。同じ Widget をスケール 1.0 → フルスクリーンサイズに拡大表示し、PlayerIcon の位置計算も同じスケーリング係数で動作させれば実装できます。

まとめ

UE5 のミニマップ実装の核は、Widget Blueprint でマップとアイコンを重ね、Tick でワールド座標を 2D 座標に変換し続けること。一度この基盤を作れば、回転マップ、複数アイコン、ズーム、全画面マップなどの拡張が容易です。