ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Unreal Engine 5(UE5)で画面の中央にメッセージ(テキスト)を表示するには、ウィジェットブループリントにテキストブロックを配置し、そのアンカーを画面中央、アライメントを「0.5, 0.5」に設定したうえで、ゲーム側から「Create Widget」と「Add to Viewport」で表示するのが基本的な方法です。アンカーとアライメントの両方を正しく設定することが、どの解像度でも確実に中央へ配置するための要点になります。
| この記事の要点 |
|---|
|
画面中央にメッセージを表示する全体の流れ
UE5でメッセージを画面に出す手段はいくつかありますが、見た目の調整や中央寄せのしやすさを考えると、UMG(Unreal Motion Graphics)のウィジェットを使う方法が扱いやすい傾向にあります。デバッグ用途であれば「Print String」でも文字は出せますが、表示位置やフォントを細かく制御したい場合はウィジェットを使う方が向いています。
大まかな流れは次のとおりです。
- ウィジェットブループリントを作成し、テキストブロックを中央に配置する。
- ゲーム側(プレイヤーキャラクターやHUDなど)で「Create Widget」によりウィジェットを生成する。
- 「Add to Viewport」で画面に表示する。
- 必要に応じて「Set Text」で文言を変更し、一定時間後に「Remove from Parent」で消す。
ウィジェットブループリントとテキストブロックを用意する
まず、メッセージの入れ物となるウィジェットを作成します。
- コンテンツブラウザで右クリックし、「ユーザーインターフェース」→「ウィジェットブループリント」を選択します(UE5のバージョンによっては、生成時に親クラスとして「User Widget」を選ぶ画面が表示されます)。
- 名前を「WBP_Message」など分かりやすいものに変更し、ダブルクリックしてUMGエディタ(デザイナー)を開きます。
- 左側の「パレット」から「Text(テキスト)」を、中央のデザイナー領域へドラッグして配置します。
配置したテキストブロックを選択し、右側の「詳細(Details)」パネルで設定を行います。後からブループリントで文言を差し替えられるよう、テキストブロックの変数名(例: MessageText)を分かりやすく付け、「Is Variable(変数として公開)」にチェックを入れておくと便利です。
なお、テキストブロックを直接キャンバスに置いて中央寄せする方法のほか、テキストブロックを「Size Box」や「Border」などのコンテナに入れてから中央配置する方法もあります。本記事ではまず最小構成として、テキストブロックを直接中央に配置する手順を説明します。
テキストブロックを画面中央に配置する設定
ウィジェットの一番外側(ルート)がCanvas Panel(キャンバスパネル)になっている場合、その上に置いた要素は「アンカー」と「位置」と「アライメント」で配置が決まります。中央に正しく配置するには、これらをまとめて設定する必要があります。
テキストブロックを選択した状態で、「詳細」パネルの「Slot (Canvas Panel Slot)」付近にあるアンカー設定を開き、次のように設定します。
| 項目 | 設定値 | 役割 |
|---|---|---|
| アンカー(Anchors) | 画面中央(中央のプリセット) | 親(画面)に対する基準点を中央にする |
| Position X / Position Y | 0 / 0 | アンカー基準点からのずれをゼロにする |
| Alignment X / Alignment Y | 0.5 / 0.5 | 要素自身の原点(ピボット)を中心に合わせる |
アンカーは、アンカーメニューを開いたときに表示されるプリセットの中から、中央(縦横ともに中央)を選びます。アンカー値で表すと、横0.5・縦0.5の位置(画面の真ん中)が基準点になります。
ここで重要なのがアライメント(Alignment)です。アライメントは要素自身のどの点をアンカーに合わせるかを0〜1で指定する値で、0.5, 0.5に設定すると要素の「中心」がアンカー(画面中央)にそろいます。アンカーを中央にしただけでアライメントを既定のままにすると、要素の左上が画面中央に来てしまい、見た目が右下にずれて感じられます。アンカー中央+位置0+アライメント0.5の3点をそろえて、はじめて要素全体が画面中央に配置されます。
テキスト自体の左右の揃え(Justification)も別途設定できます。文字数によって幅が変わる場合は、テキストブロックの「Justification」を中央寄せにしておくと、複数行や可変長のメッセージでも中央にそろいやすくなります。
メッセージを表示する処理を組む
次に、作成したウィジェットを実際に画面へ出す処理を、プレイヤーキャラクターのブループリントなどに追加します。ここではカスタムイベント「ShowMessage」を作る例で説明します。
- イベントグラフを開き、カスタムイベント「ShowMessage」を作成します。
- 必要に応じて、ShowMessageに文字列型(String または Text)の入力ピン「Message」を追加します。
- 「Create Widget」ノードを置き、Class に先ほどの「WBP_Message」を指定します。Owning Player には、対象となるプレイヤーコントローラを接続します(未指定でも動作する場合がありますが、明示しておくと挙動が安定しやすいです)。
- 「Create Widget」の戻り値(Return Value)を、後で消せるように変数(例: CurrentMessageWidget)に保存します。
- その変数を「Add to Viewport」に接続して、画面に表示します。
処理の流れをノードの並びで表すと次のようになります。
ShowMessage(Message) → Create Widget(Class: WBP_Message) → Set CurrentMessageWidget(生成したウィジェットを変数に保存) → Add to Viewport |
「Add to Viewport」にはZ Orderという入力があり、数値が大きいほど手前に表示されます。他のUI(HUDやメニューなど)と重なる場合は、このZ Orderを調整して、メッセージが他の要素の裏に隠れないようにします。
表示するメッセージの文言を動的に変える
表示するたびに文言を変えたい場合は、テキストブロックの「Set Text」を使います。前述のように、テキストブロックを「Is Variable」にしておくと、ウィジェット内のブループリントから直接参照できます。
ウィジェットブループリント側に文言を受け取る関数やイベント(例: SetMessageText(Text))を用意し、その中でテキストブロックの「Set Text」を呼ぶと、外部から渡した文字列を画面に反映できます。
SetMessageText(InText) → MessageText の Set Text(In Text: InText) |
呼び出し側では、Create Widgetの直後にこの関数を呼んでから「Add to Viewport」する、という順序にすると、表示と同時に正しい文言が出ます。なお、テキストブロックが扱うのはText型のため、String型の値を渡す場合は「To Text (String)」などで変換が必要になることがあります。
一定時間でメッセージを自動的に消す
通知のように一定時間だけ表示して自動で消したい場合は、「Delay」と「Remove from Parent」を組み合わせます。「Remove from Parent」は、ビューポートに追加したウィジェットを画面から取り除くノードで、ターゲットには表示中のウィジェット(保存しておいた変数)を指定します。
Add to Viewport → Delay(Duration: 3.0) → Remove from Parent(Target: CurrentMessageWidget) |
Delayの秒数は、メッセージの長さや用途に合わせて調整します。フェードアウトのような演出を加えたい場合は、ウィジェット内のアニメーション機能(UMGのアニメーション)を再生してから「Remove from Parent」する、という流れにすると、より滑らかに消すことができます。
よくある落とし穴と対処
| 注意したいポイント |
|---|
|
よくある質問
Q. アンカーとアライメントの違いは何ですか。
アンカーは「親(画面)のどこを基準点にするか」を決める設定で、アライメントは「要素自身のどの点をその基準点に合わせるか」を決める設定です。中央配置では、アンカーを画面中央にし、アライメントを0.5, 0.5にして要素の中心を基準点に重ねます。両方を設定して初めて、要素全体が画面の真ん中にそろいます。
Q. テキストではなく画像やアイコンを中央に出したい場合はどうしますか。
基本的な配置の考え方は同じです。テキストブロックの代わりに「Image」をキャンバスに置き、アンカーを中央、アライメントを0.5, 0.5に設定すれば中央に配置できます。テキストと画像をまとめて中央に出したい場合は、それらを「Overlay」や「Vertical Box」などのコンテナにまとめ、そのコンテナを中央配置すると、全体の位置をひとまとめに管理できます。
Q. C++では同様のことはできますか。
できます。UMGはC++からも操作でき、ウィジェットの生成(CreateWidget)やビューポートへの追加(AddToViewport)に相当する処理をコードで記述できます。チームや規模に応じて、ブループリントとC++を使い分けるとよいでしょう。各ノードや関数の正確な引数・挙動は、利用しているUE5のバージョンの公式ドキュメントで確認することをおすすめします。
ウィジェットによる中央メッセージ表示は、アイテム取得時の通知やチュートリアルの案内、演出用のテロップなど、さまざまな場面に応用できます。まずはアンカー・位置・アライメントの3点を正しくそろえることから始めてみてください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 床の上に乗ったらイベントを発生させる方法
- OverlapAllDynamicとOverlapAllの違い
- タイトル画面を作る方法
- サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
- ボタンに文字を記載する方法
- Event ActorBeginOverlapとOn Component Begin Overlapの違い
- キャラクターに特定のオブジェクトとの当たり判定を付ける
- 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
- 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
- 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
- Blenderファイルをインポートする方法
- 鏡を作成する方法
- レベルブループリントでキャラクターの出現を設定する方法
- サードパーソンテンプレートにおけるキャラクター出現の定義
- アイテムに近づいたらボタンを押してイベントを発火させる方法
- 画面の中央にメッセージを表示する方法
- どこからでも呼び出せるカスタムイベントを作成する方法
- カスタムイベントに引数を追加する方法
- 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
- オブジェクトに近づいている間だけメッセージを表示する方法
- PCの画面を操作するUIを作る方法
- コンテンツブラウザに画像を追加する方法
- SetInputMode_UIOnlyを取り消す方法
- 特定の画像の上にマウスカーソルを置いたら手マークにする方法
- オブジェクトがアウトライナーで選択できない原因と解決策
- PlayerStartを作成する方法
- メニュー画面を作成して開く方法
- 「Esc」キーを押してメニュー画面を開く方法
- イベントの「On Clicked」と「On Pressed」の違い
- 「Set Input Mode」の種類と使い方
- 「Set Game Paused」の使い方と詳細解説
- Motion Matchingとは?
- 「GameMode」と「GameModeBase」の違い
- マップに配置したTargetPointを取得する方法
- TargetPointにタグをつけて取得する方法
- Spawnしたインスタンスがイベントを実行する方法
- 特定の時間ごとに処理を実行する方法
- 数値をランダムで出力する方法
- ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
- MaxWalkSpeedを変更する方法
- しゃがむ動作を導入する方法
- キャラクターのアニメーションを設定する方法
- 導入済みのプラグインを確認する方法
- Motion Matchingの導入と必要なプラグイン
- プレイヤーを非表示にする方法
- カメラを傾ける角度を制限させる方法
- 配列からランダムに重ならない要素を特定の数取得する方法
- カメラの映す画面に文字やエフェクトを付ける方法
- キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
- プライマリーデータアセットを活用する方法
- プレイヤーのHPといった変数を定義する最適な場所
- カメラに映った画面をスクリーンショットとして保存する方法
- ゲーム内のカメラ映像を保存して再表示する方法
- HighResShot を使って高解像度の画像を保存する方法(UE5)
- HighResShotで保存した画像のファイル名を取得する方法
- SceneCapture2DとFrameGrabberの画像保存方法の比較
- SceneCapture2Dを使用して画像を保存・取得する方法
- HighResShotとTake High Res Screenshotの違い
- ゲーム終了ボタンを作成する方法
- 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
- 画面上にメッセージを指定された時間表示させる方法
- シェーダコンパイル時間を短縮する方法
- 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
- データベースを活用する方法
- UE5.5がインストールされた環境にUE5.4を追加で導入する方法
- World PartitionとWorld Compositionの違い
- オープンワールドテンプレートとは?
- ポーンをスポーンさせても視点を切り替えない方法
- キャラクター同士がすり抜けてしまう問題の解決方法
- キャラクターの外見を動的に変更
- World Partitionでインスタンスが「アンロード済み」になる問題
- データ アセットとデータ テーブルの違い
- コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
- エディターのソースコードの自動保存の頻度を高める方法
- SpawnActorでSpawn Transform Rotationが反映されない理由
- ミニマップを表示しポーンの位置を反映する方法
- RInterp ToとVInterp Toの違い
- 毎秒実行するイベントの定義方法
- Niagara のエフェクトにコリジョンを持たせる方法
- 「Overlap」と「Hit」の違い
- OverlapはあるがHitがない原因
- Overlapした位置の座標を取得する方法
- ブループリントでレベル間のパラメータを受け渡す方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?