ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Set Input Mode とは
Unreal Engine の Set Input Mode は、プレイヤーの入力を「ゲーム」と「UI(Widget)」のどちらに渡すかを切り替える、Player Controller の関数群です。タイトル画面 / ゲームプレイ / ポーズメニュー / インベントリといった画面状態を作る上で必須の知識です。
3 種類の Set Input Mode
| モード | ゲーム入力 | UI 入力 | カーソル | 主な用途 |
|---|---|---|---|---|
| Set Input Mode Game Only | 受け取る | 受け取らない | 通常非表示 | ゲームプレイ中 |
| Set Input Mode UI Only | 受け取らない | 受け取る | 表示 | メインメニュー / ポーズ |
| Set Input Mode Game And UI | 受け取る | 受け取る | 表示可 | HUD・インベントリ・ミニマップ |
1. Set Input Mode Game Only
純粋なゲームプレイ中に使用。Widget があっても入力は届かず、すべて Player Controller / Pawn に流れます。
Blueprint での書き方
- Get Player Controller で PlayerController 取得
- Set Input Mode Game Only ノードを呼ぶ
- 合わせて Set Show Mouse Cursor → False
C++ での書き方
// MyPlayerController.cpp
#include "Blueprint/UserWidget.h"
void AMyPlayerController::EnterGameplay()
{
FInputModeGameOnly InputMode;
InputMode.SetConsumeCaptureMouseDown(true);
SetInputMode(InputMode);
bShowMouseCursor = false;
bEnableClickEvents = false;
bEnableMouseOverEvents = false;
}
2. Set Input Mode UI Only
メニュー画面・ポーズ画面・タイトル画面で使用。ゲーム入力は完全に止まり、UI 操作のみ可能になります。
必須パラメータ: In Widget to Focus
UI Only モードでは、キーボード入力を受け付ける Widget をフォーカス指定する必要があります。指定しないとキーボードナビゲーション(Tab、矢印キー)が効きません:
void AMyPlayerController::ShowPauseMenu()
{
PauseWidget = CreateWidget(this, PauseWidgetClass);
PauseWidget->AddToViewport();
FInputModeUIOnly InputMode;
InputMode.SetWidgetToFocus(PauseWidget->TakeWidget());
InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);
SetInputMode(InputMode);
bShowMouseCursor = true;
UGameplayStatics::SetGamePaused(this, true);
}
Blueprint パターン
- Create Widget でメニュー Widget 生成
- Add to Viewport で表示
- Get Player Controller → Set Input Mode UI Only
- "In Widget to Focus" ピンに作成した Widget を接続
- Set Show Mouse Cursor → True
3. Set Input Mode Game And UI
もっとも汎用的。ゲームを動かしながら HUD・ミニマップ・チャット欄も操作したい場合に使用:
void AMyPlayerController::ShowInventory()
{
InventoryWidget = CreateWidget(this, InventoryClass);
InventoryWidget->AddToViewport();
FInputModeGameAndUI InputMode;
InputMode.SetWidgetToFocus(InventoryWidget->TakeWidget());
InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::LockOnCapture);
InputMode.SetHideCursorDuringCapture(false);
SetInputMode(InputMode);
bShowMouseCursor = true;
}
Lock Mouse To Viewport(カーソル拘束)
| EMouseLockMode | 意味 |
|---|---|
| DoNotLock | カーソルがウィンドウ外に出てもよい |
| LockOnCapture | マウスクリック時のみウィンドウ内に拘束 |
| LockAlways | 常時ウィンドウ内に拘束 |
| LockInFullscreen | フルスクリーン時のみ拘束 |
典型シナリオ別の書き分け
| 場面 | Set Input Mode | Show Cursor | 備考 |
|---|---|---|---|
| タイトル画面 | UI Only | True | BeginPlay で適用 |
| ゲーム開始 | Game Only | False | Possess 時 / レベル遷移時 |
| ポーズメニュー | UI Only | True | + SetGamePaused(true) |
| インベントリ | Game And UI | True | 背景でゲーム継続 |
| 会話ウィンドウ | UI Only | True | 移動を止める場面 |
| HUD のみ | Game Only | False | HUD は入力不要なので |
Show Mouse Cursor との関係
Set Input Mode は入力の振り分けを決めるだけで、カーソル表示は別フラグです:
// PlayerController のメンバ変数
bShowMouseCursor = true; // カーソル表示
bEnableClickEvents = true; // クリック判定
bEnableMouseOverEvents = true; // ホバー判定
Blueprint では Set Show Mouse Cursor ノード(Player Controller のメンバ関数)を使います。
BeginPlay で初期化
void AMyPlayerController::BeginPlay()
{
Super::BeginPlay();
// タイトル画面から始まる場合
if (TitleWidgetClass)
{
TitleWidget = CreateWidget(this, TitleWidgetClass);
TitleWidget->AddToViewport();
FInputModeUIOnly InputMode;
InputMode.SetWidgetToFocus(TitleWidget->TakeWidget());
SetInputMode(InputMode);
bShowMouseCursor = true;
}
}
よくあるトラブル
Q: UI Only にしたのに Tab / 矢印キーが効かない
A: Widget to Focus を指定していない。InputMode.SetWidgetToFocus(MyWidget->TakeWidget()) を必ず呼ぶ。
Q: Game And UI でゲーム入力が UI に吸われる
A: Widget の各ボタンの IsFocusable を確認。フォーカスが Widget にあるとキーが UI に流れる。クリック以外の入力を Game 側に通したいなら IsFocusable を Off。
Q: マウスが画面外に行ってしまう
A: SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways) でウィンドウ内に拘束。
Enhanced Input との併用
UE5 標準の Enhanced Input でも Set Input Mode はそのまま有効。Input Mapping Context との組み合わせで「メニュー時はメニュー用 Context、ゲーム中はゲーム用 Context」と切り替えるとさらに整理できます:
void AMyPlayerController::ShowMenu()
{
if (auto Subsystem = ULocalPlayer::GetSubsystem(GetLocalPlayer()))
{
Subsystem->RemoveMappingContext(GameplayContext);
Subsystem->AddMappingContext(MenuContext, 0);
}
FInputModeUIOnly InputMode;
InputMode.SetWidgetToFocus(MenuWidget->TakeWidget());
SetInputMode(InputMode);
bShowMouseCursor = true;
}
FAQ
Q: SetInputMode はいつ呼ぶ?
A: 画面状態が切り替わる瞬間。タイトル → ゲーム開始時 / Esc で一時停止時 / インベントリ開閉時 など。状態管理を関数化(EnterGameplay / EnterMenu)すると保守しやすい。
Q: マルチプレイヤーで気をつけることは?
A: Set Input Mode はクライアントローカルの設定。リッスンサーバーホストでもクライアント側のコントローラ単位で呼ぶ。サーバー側で呼んでも反映されない。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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を取得する方法
- UE5でマップに配置したTargetPointを取得する方法
- TargetPointにタグをつけて取得する方法
- Spawnしたインスタンスがイベントを実行する方法
- 特定の時間ごとに処理を実行する方法
- 数値をランダムで出力する方法
- ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
- MaxWalkSpeedを変更する方法
- しゃがむ動作を導入する方法
- キャラクターのアニメーションを設定する方法
- 導入済みのプラグインを確認する方法
- Motion Matchingの導入と必要なプラグイン
- プレイヤーを非表示にする方法
- カメラを傾ける角度を制限させる方法
- 配列からランダムに重ならない要素を特定の数取得する方法
- カメラの映す画面に文字やエフェクトを付ける方法
- キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
- プライマリーデータアセットを活用する方法
- プレイヤーのHPといった変数を定義する最適な場所
- カメラに映った画面をスクリーンショットとして保存する方法
- スクショ以外の方法でゲーム内のカメラ映像を保存して再表示する方法
- HighResShotを使って画像を保存する方法
- 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アノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?