ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
Unreal Engine 5(UE5)でプレイヤーがオブジェクトに近づいている間だけメッセージを表示するには、対象オブジェクトに範囲検知用のコリジョン(Sphere CollisionやBox Collision)を付け、「On Component Begin Overlap」でメッセージを表示し、「On Component End Overlap」で消すのが基本です。範囲に入った瞬間に表示をOn、出た瞬間にOffへ切り替えるため、「近づいている間だけ」という条件をシンプルかつ確実に実現できます。毎フレーム距離を測る方法もありますが、Overlapイベントを使うほうが処理が軽く、表示/非表示のタイミングも管理しやすくなります。
この記事の要点
- オブジェクト側に検知用コリジョンを追加し、Overlapイベントで表示を切り替えるのが基本形です。
- 「On Component Begin Overlap」で表示On、「On Component End Overlap」で表示Offにします。
- 画面全体に出すならウィジェットをAdd to Viewport、消すときはRemove from Parentを使います。
- オブジェクトの真上などの3D空間に出したいときはWidget Componentを使い、近接時だけ可視にします。
- コリジョンのGenerate Overlap Eventsを有効化し、消すためにウィジェット参照を保持することが重要です。
- 複数オブジェクトを扱う場合は、表示の重複や消し忘れに注意が必要です。
1仕組み:Overlapで表示をOn/Offする
「近づいている間だけ表示する」という挙動は、範囲の出入りを検知する仕組みと表示/非表示を切り替える仕組みの2つに分解できます。
範囲の検知には、対象オブジェクトに取り付けたコリジョン(当たり判定)を使います。プレイヤーがその範囲に入ると「Begin Overlap(重なり開始)」、範囲から出ると「End Overlap(重なり終了)」というイベントが発生します。この2つのイベントに、それぞれ「メッセージを表示する処理」と「メッセージを消す処理」をつなぐことで、近づいている間だけ表示される状態を作れます。
毎フレーム実行される「Event Tick」で距離を計算する方法もありますが、Overlapイベントは範囲の出入りが起きた瞬間にだけ呼ばれるため、無駄な計算が少なく、表示状態の切り替えタイミングも明確です。特別な理由がなければ、まずはOverlapイベントを使う方法から検討するとよいでしょう。
2手順:画面UIとして表示する基本形
ここでは、メッセージを画面全体に重ねて表示する(HUDのように出す)基本的な手順を説明します。操作対象は、メッセージを出したいオブジェクトのBlueprint(アクターBlueprint)です。
1. 検知用のコリジョンを追加する
オブジェクトのBlueprintを開き、コンポーネントとしてSphere Collision(球状の範囲)またはBox Collision(箱状の範囲)を追加します。プレイヤーが「どのくらい近づいたら表示するか」を決める範囲なので、見た目のメッシュより少し大きめに設定するのが一般的です。Sphereなら「Sphere Radius」、Boxなら「Box Extent」で範囲の大きさを調整します。
追加したコリジョンを選択し、詳細(Details)パネルで以下を確認します。
- Generate Overlap Events(オーバーラップイベントを生成)が有効(チェックON)になっていること。
- Collision Presets(衝突プリセット)が、プレイヤーとOverlapする設定になっていること(例:OverlapAllDynamicや、プレイヤー側のチャンネルをOverlapにしたカスタム設定)。
2. 表示するメッセージ用のウィジェットを用意する
コンテンツブラウザで「Widget Blueprint(ウィジェットブループリント)」を新規作成し、Text(テキスト)などでメッセージの見た目を作ります。ここでは例として「WBP_Message」という名前にしたとします。文字列やデザインは、このウィジェット内で自由に編集できます。
3. Begin Overlapで表示する
オブジェクトのBlueprintのイベントグラフで、追加したコリジョンの「On Component Begin Overlap」イベントを追加します。コンポーネントを選択した状態で詳細パネル下部のイベント欄から追加するか、コンポーネントを右クリックして該当イベントを選びます。
このイベントから、次の流れでノードをつなぎます。
- Create Widget … 表示するクラスに「WBP_Message」を指定してウィジェットを生成します。
- 生成したウィジェットを変数として保持します(後で消すために参照が必要です)。
- Add to Viewport … 生成したウィジェットを画面に追加して表示します。
「重なった相手が本当にプレイヤーかどうか」を判定したい場合は、Begin Overlapの「Other Actor」をCast to(プレイヤーキャラクターのクラス)で確認し、成功したときだけ表示する形にすると、他のアクターに反応して誤って表示されるのを防げます。
4. End Overlapで非表示にする
同じコリジョンの「On Component End Overlap」イベントを追加し、保持しておいたウィジェット変数に対してRemove from Parentを実行します。これでビューポートからウィジェットが取り除かれ、メッセージが消えます。範囲から出るたびに確実に消えるよう、表示時と同じ参照を使って消すのがポイントです。
Begin Overlap: On Component Begin Overlap → (Cast to PlayerCharacterで判定) → Create Widget(WBP_Message) → 変数に保存 → Add to Viewport
End Overlap: On Component End Overlap → (Cast to PlayerCharacterで判定) → 保存したウィジェット変数 → Remove from Parent |
33D空間(オブジェクトの近く)に出す方法
画面全体ではなく、オブジェクトの真上や近くなど3D空間上にメッセージを浮かべたい場合は、Widget Component(ウィジェットコンポーネント)を使います。これはウィジェットを3Dの板(または常にカメラを向く表示)としてワールド内に配置できるコンポーネントです。
- オブジェクトのBlueprintにWidget Componentを追加し、表示位置(オブジェクトの上など)に配置します。
- 詳細パネルの「Widget Class」に、表示したいウィジェット(例:WBP_Message)を指定します。
- 「Space」をScreenにすると常にカメラ側を向き、文字が読みやすくなります。立体的な板として置きたい場合はWorldを選びます。
- 通常は最初から見えないよう、Widget Componentの可視性をオフ(非表示)にしておきます。
そのうえで、Begin OverlapでSet Visibility(またはSet Hidden in Game)を使ってWidget Componentを表示状態にし、End Overlapで再び非表示に戻します。この方法では、画面用ウィジェットのようにAdd to Viewport/Remove from Parentを毎回行う必要はなく、表示/非表示を切り替えるだけで済みます。
4複数オブジェクトを扱う場合
同じ仕組みのオブジェクトを複数配置する場合、表示・非表示の処理を各オブジェクトのBlueprint内に持たせておけば、配置するだけでそれぞれが独立して動作します。各オブジェクトが自分専用のウィジェット参照を保持するため、近づいたオブジェクトのメッセージだけが表示されます。
一方で、画面全体に出すタイプ(Add to Viewport)の場合、複数のオブジェクトの範囲が重なっていると、メッセージが二重に表示されることがあります。同時に1つだけ表示したいときは、共通の管理役(プレイヤーやGame Instanceなど)に「今表示中のメッセージ」を1つだけ持たせ、近づいたら差し替える設計にすると重複を避けやすくなります。3D空間に出すWidget Component方式は、各オブジェクトに紐づくため、もともと重複しにくいのが利点です。
5つまずきやすいポイント
| 注意したい落とし穴 |
|---|
|
6よくある質問
Q. Event Tickで距離を測る方法とどちらが良いですか?
多くの場合、Overlapイベントのほうが扱いやすく処理も軽いため、まずはこちらを推奨します。Tickで距離を測る方法は、距離に応じて表示を段階的に変える(透明度を変えるなど)といった細かい制御をしたい場合に向いています。単純に「一定距離内で表示・それ以外で非表示」なら、Overlapで十分です。
Q. メッセージを「近づいたら出して、離れても少しの間だけ残す」ことはできますか?
できます。End Overlapで即座に消すのではなく、タイマー(Set Timer by Eventなど)を使って一定時間後にRemove from ParentやSet Visibilityを実行すれば、離れてから少し遅れて消す挙動になります。再び範囲に入ったらタイマーを止めて表示を維持する、といった調整も可能です。
Q. 表示するメッセージの文字を、オブジェクトごとに変えたいです。
ウィジェット側に表示用のテキスト変数を用意し、Create Widgetした直後(またはWidget Component生成後)にその変数へ各オブジェクト固有の文字列を渡せば、同じウィジェットを使い回しつつオブジェクトごとに異なるメッセージを表示できます。
7まとめ
UE5でプレイヤーがオブジェクトに近づいている間だけメッセージを表示するには、オブジェクトに検知用コリジョンを付け、Begin Overlapで表示・End Overlapで非表示に切り替えるのが基本です。画面全体に出すならCreate WidgetとAdd to Viewport/Remove from Parent、オブジェクトの近くに浮かべるならWidget Componentの可視性切り替えを使い分けます。コリジョンのOverlap設定を有効にすること、消すためのウィジェット参照を保持すること、重複表示を避けることを押さえれば、目的に合った安定した表示を実装できます。なお、ノード名やオプションの位置はバージョンによって異なる場合があるため、詳細は利用中のバージョンの公式ドキュメントもあわせて確認することをおすすめします。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?