UMGでUI制作を始める前に
Unreal Engine (UE) でゲーム開発を始めたばかりの皆さん、ゲームの核となるロジックは組めても、プレイヤーが直接触れるユーザーインターフェース(UI) の作成でつまずいていませんか?
- 「HUD(ヘッドアップディスプレイ)をどうやって画面に表示すればいいのか?」
- 「HPバーやスコアを、ゲーム内の値と連動させるにはどうすればいい?」
- 「メニュー画面とゲームプレイ画面の切り替えが複雑になる…」
ゲームUIは、プレイヤー体験を大きく左右する重要な要素です。しかし、UIのレイアウト、アニメーション、そしてゲームロジックとの連携は、初心者にとって大きな壁となりがちです。
本記事では、Unreal Engineの強力なUIシステムであるUMG (Unreal Motion Graphics) と、その中核をなすWidget Blueprint(ウィジェットブループリント) に焦点を当て、基本から実践的な応用テクニックまでを、豊富なBlueprintの例を交えて徹底的に解説します。この記事を読めば、初心者から一歩進んだ、効率的でメンテナンス性の高いUI作成スキルが身につくでしょう。
UMGとWidget Blueprintの基本
UMG (Unreal Motion Graphics) とは?
UMGは、Unreal Engineに標準搭載されているUI作成フレームワークです。HTML/CSSのようなマークアップ言語ではなく、ビジュアルスクリプティング とドラッグ&ドロップ による直感的な操作でUIを構築できるのが特徴です。
UMGのUI要素はすべてウィジェット(Widget) として扱われます。ボタン、テキスト、画像、スライダーといった基本的な要素から、複雑なレイアウトを構成するためのコンテナウィジェットまで、多種多様なウィジェットが用意されています。
Widget Blueprint(ウィジェットブループリント)の構造
Widget Blueprintは、特定のUI要素(例:メインメニュー、HPバー)の見た目と動作ロジックを定義するアセットです。主に以下の2つのタブで構成されています。
- Designer(デザイナー)タブ:
- UIのレイアウトを構築する場所です。パレットからウィジェットをドラッグ&ドロップし、サイズや位置、アンカー(画面のどの位置に固定するか)を設定します。
- ウィジェットの見た目(色、フォント、画像など)もここで設定します。
- Graph(グラフ)タブ:
- UIの動作ロジックをBlueprintで記述する場所です。ボタンが押されたときの処理や、ゲームの状態に応じてUIを更新する処理などを実装します。
HUDの作成手順
最も基本的なUIである、プレイヤーのHPを表示するHUD(Head-Up Display)を例に、Widget Blueprintの作成手順を見ていきましょう。
ステップ1: Widget Blueprintの作成
- コンテンツブラウザで右クリックし、「User Interface 」-> 「Widget Blueprint」を選択します。
- 親クラスとして「User Widget」を選択し、名前を
WBP_PlayerHUDなどとします。
ステップ2: ウィジェットの配置とアンカー設定
WBP_PlayerHUDを開き、Designerタブで以下のウィジェットを配置します。
- Canvas Panel: ルートウィジェットとして自動で配置されます。
- Horizontal Box: HPバーとテキストを横並びにするためのコンテナです。Canvas Panelの子として配置します。
- Text: 「HP:」というラベル用。Horizontal Boxの子として配置します。
- Progress Bar: 実際のHPの割合を表示するためのバー。Horizontal Boxの子として配置します。
【重要:アンカー設定】 UIが様々な画面サイズやアスペクト比に対応できるように、必ずウィジェットのアンカー を設定します。HUDは通常、画面の左上や右上に固定されるため、Horizontal Boxを選択し、アンカーを「左上」に設定します。
ステップ3: ゲームへの表示ロジック
作成したウィジェットをゲーム画面に表示するには、ゲームの開始時(通常はプレイヤーコントローラーやHUDクラス)で以下の処理を行います。
// プレイヤーコントローラーのBeginPlayイベントなど
// 1. Create WidgetノードでWBP_PlayerHUDのインスタンスを作成
// 2. Add to Viewportノードで作成したウィジェットを画面に追加
データバインディングによる動的UI更新
HPバーをゲーム内のプレイヤーのHPと連動させるには、データバインディング(Data Binding) という仕組みを使います。
データバインディングとは、ウィジェットのプロパティ(例:Progress Barの割合)を、Blueprintの関数や変数に自動的にリンクさせる機能です。これにより、ゲームロジック側で変数を更新するだけで、UIが自動的に最新の状態を反映します。
データバインディングの実装例(Progress Bar)
- DesignerタブでProgress Barを選択します。
- Detailsパネルの「Progress」セクションにある「Percent」プロパティの横にあるBind ボタンをクリックし、「Create Binding」を選択します。
- Graphタブに
Get Percentという名前の新しい関数が作成されます。 - この関数内で、プレイヤーキャラクターのHPを取得し、最大HPで割って0.0から1.0の間の値(割合)を算出し、Returnノードに接続します。
// GraphタブのGet Percent関数内
// 1. Get Player Characterノード
// 2. Cast To [プレイヤーキャラクタークラス]ノード
// 3. [プレイヤーキャラクター]からGet Current HPノード
// 4. Get Max HPノード
// 5. (Current HP / Max HP) を計算
// 6. Return ValueとしてPercentに接続
【ベストプラクティス】
バインディング関数は、Slateの描画サイクル に基づいて、UIの値が必要になるたびに呼び出されます。Event Tickのような厳密に毎フレーム実行される仕組みとは異なりますが、UIが表示されている間は高頻度で呼び出されるため、パフォーマンス上の理由から、複雑な 計算や頻繁な参照を伴うバインディングは避けるべきです。 特に、値が頻繁に変わらない場合は、Event Dispatcher を使って、値が変更されたときだけUI更新用のカスタムイベントを呼び出す方が効率的です。
イベント処理の実装例(Button)
ボタンウィジェットの動作ロジックは、イベントを使って実装します。
- DesignerタブでButtonウィジェットを選択します。
- Detailsパネルの一番下にある「Events」セクションで、「On Clicked」の横にある**+** ボタンをクリックします。
- Graphタブに
On Clicked (Button)というイベントノードが作成されます。 - このイベントノードから、メニューを開く、ゲームを終了するなど、必要な処理を接続します。
ベストプラクティスとよくある間違い
ベストプラクティス:ウィジェット間の通信
複雑なUIでは、複数のウィジェットが連携する必要があります。ウィジェット間の通信には、以下の方法が推奨されます。
| 通信方法 | 説明 | 用途 |
|---|---|---|
| Custom Event | 親ウィジェットから子ウィジェットへ直接処理を呼び出す。最もシンプル。 | 親が子の状態を直接操作する場合。 |
| Widget Interface | 複数のウィジェットが共通の関数を実装するための契約。 | 汎用的なウィジェット(例:通知ポップアップ)を作成する場合。 |
| Event Dispatcher | ウィジェット内でイベントを発生させ、外部(例:プレイヤーコントローラー)でそのイベントを購読(Subscribe)する。 | 子ウィジェットが親やゲームロジックに「何か起こった」ことを通知する場合。最も推奨される方法。 |
よくある間違い
| 間違い | 問題点 | 解決策 |
|---|---|---|
| すべてのロジックをウィジェットに書く | UIとゲームロジックが密結合し、再利用性やメンテナンス性が低下する。 | ウィジェットは「表示」と「入力受付」に専念させ、ゲームロジック(HPの増減など)はプレイヤーコントローラーやゲームモードに持たせる。 |
| Event TickでUIを更新する | 毎フレーム実行されるため、UIが不要な処理でパフォーマンスを圧迫する。 | データバインディングを使うか、Event Dispatcher を使って、値が変更されたときだけUI更新用のカスタムイベントを呼び出す。 |
| アンカー設定を怠る | 異なる解像度でUIの配置が崩れる。 | すべてのトップレベルウィジェットに適切なアンカーを設定し、様々な解像度でテストする。 |
Widget Blueprint活用のポイント
本記事では、Unreal EngineのUMGとWidget Blueprintを使ったUI作成の基本から応用までを解説しました。
| 要点 | 説明 |
|---|---|
| UMG/Widget Blueprint | UEのビジュアルUIシステム。Designerで見た目を、Graphでロジックを構築する。 |
| データバインディング | UI要素のプロパティをゲームロジックの変数に自動で連動させる強力な機能。 |
| イベント処理 | ボタンクリックなどのユーザー操作をトリガーにロジックを実行する。 |
| ベストプラクティス | ウィジェットは表示に専念させ、Event Dispatcherでゲームロジックと疎結合に通信させる。 |
UMGは非常に柔軟で強力なツールです。これらの基本とベストプラクティスをマスターすれば、あなたのゲームのUIは格段に洗練され、プレイヤーにとって快適な体験を提供できるようになるでしょう。まずはシンプルなHUDから、実践を積み重ねていきましょう。