69.

UE5でポーンをスポーンしても視点を切り替えない方法|Auto Possess・Possess制御

編集

Unreal Engine 5(UE5)でポーン(Pawn)をスポーンしても視点(カメラ)を切り替えないようにするには、スポーンするポーンを操作対象(Possess)にしないことが基本です。視点が移るのは「操作対象が変わると、それに連動してカメラの注視先(View Target)も変わる」仕組みのためで、スポーンしたポーンを操作対象にしなければ、視点は元のまま保たれます。具体的には、スポーンするポーンのAuto Possess Playerを「Disabled」にする、明示的にPossessを呼ばない、必要に応じてSet View Target with Blendで視点を元に戻す、という3つの方法が中心になります。

この記事の要点
  • 視点が切り替わるのは、操作対象(Possess対象)の変化にカメラ(View Target)が連動することが主な原因。スポーン自体が直接カメラを動かすわけではない。
  • 最も確実なのは、スポーンするポーンを操作対象にしないこと。Auto Possess Playerを「Disabled」にし、明示的にPossessしなければ視点は移らない。
  • Player ControllerのAuto Manage Active Camera Targetが有効だと、Possess時に自動でカメラ注視先が更新される。無効化すると自動追従を止められる。
  • すでに視点が動いてしまった場合や明示的に固定したい場合は、Set View Target with Blendで元のポーン(やカメラ)に視点を戻す。
  • Auto Possess PlayerとAuto Possess AIは別物。プレイヤー視点に関わるのは前者。
  • 挙動はプロジェクト設定やバージョンで差が出ることがあるため、最終的には公式ドキュメントと実機での確認を推奨。

なぜスポーンすると視点が切り替わるのか

UE5では、画面に映る視点はおおむね次の流れで決まります。Player Controller操作対象のポーン(Possess中のPawn)を持ち、その状態からPlayer Camera ManagerView Target(視点の対象アクター)を決定し、最終的なカメラ位置・向きが算出されます。

ここで重要なのは、「ポーンをスポーンしただけ」では原則として視点は動かないという点です。視点が切り替わって見える典型的な原因は、次のいずれかです。

原因何が起きているか
Auto Possess Playerが設定されているスポーンしたポーンのプロパティでAuto Possess Playerが「Player 0」などに設定されていると、スポーン時に自動でそのポーンが操作対象になり、視点も連動して移る。
明示的にPossessしているブループリントやC++でPossess(またはGet Player Controller → Possess)を呼んでおり、操作対象が新しいポーンへ移っている。
カメラ注視先の自動管理Player ControllerのAuto Manage Active Camera Targetが有効なため、操作対象の変更に合わせてView Targetが新しいポーンに更新される。
View Targetを直接変更しているSet View Target with Blendなどで、スポーンしたポーン(やそのカメラ)へ意図せず視点を向けている。

つまり「視点を切り替えない」とは、上記の連動を起こさないように制御することと言い換えられます。以下では原因に対応した対処を順に解説します。

対処1:スポーンするポーンのAuto Possess Playerを「Disabled」にする

最も基本的で確実なのが、スポーンするポーン側のAuto Possess Playerを「Disabled」にしておくことです。これが「Player 0」などになっていると、スポーンと同時に自動で操作対象になり、視点が移ってしまいます。

確認・設定手順(ブループリント)

  1. スポーンするポーン(またはCharacter)のブループリントを開く。
  2. クラスのデフォルト(Class Defaults)またはアクターのDetailsパネルを表示する。
  3. Pawn カテゴリ内のAuto Possess Playerを確認し、Disabledに設定する。
  4. あわせてAuto Possess AIも意図しない値になっていないか確認する(AIによる占有が視点に影響することは通常ないが、操作対象の管理上は確認しておくと安全)。

なお、新規に作成したポーンではAuto Possess PlayerのデフォルトはDisabledです。意図せず視点が移る場合は、テンプレートや継承元、あるいはレベルに配置済みのポーンで値が変更されていないかを点検してください。

C++でクラス側にデフォルトの自動占有を設定している場合は、コンストラクタ内の指定(例:AutoPossessPlayer = EAutoReceiveInput::Player0;)が原因になり得ます。視点を移したくないポーンでは、この指定を行わない(=Disabled相当のまま)ようにします。

対処2:そもそもPossessしない(操作対象を変えない)

スポーン処理の中でPossessを呼ぶと、その時点で操作対象が新しいポーンへ移り、カメラ自動管理が有効なら視点も連動します。視点を保ちたいなら、スポーン後にPossessを呼ばないのが原則です。元のポーンを操作し続けたい場合は、元のポーンをPossessしたまま放置すれば視点は維持されます。

ブループリントでの基本手順

  1. Spawn Actor from Classでポーンを生成する。
  2. 生成後にPossessノードをつながない(呼ばない)。
  3. 必要な処理(AIの起動、位置調整など)だけを行い、操作対象は元のポーンのまま維持する。

「スポーンしたポーンをAIに動かしてほしいが、プレイヤー視点は変えたくない」という場合は、プレイヤー(Player Controller)でPossessするのではなく、AI Controller側に占有させる設計にします。こうすると、プレイヤーの操作対象・視点はそのまま保たれます。

カメラ注視先の自動管理を止める

何らかの理由でPossessが必要な一方、視点だけは動かしたくないというケースもあります。その場合、Player ControllerのAuto Manage Active Camera Targetを無効化すると、操作対象が変わってもカメラの注視先が自動更新されなくなります(=View Targetが自動で新しいポーンに移らない)。

// Auto Manage Active Camera Target を無効化(操作対象変更に伴うカメラ自動追従を止める)

PlayerController->bAutoManageActiveCameraTarget = false;

 

// その後 Possess しても、View Target は自動では切り替わらない

PlayerController->Possess(NewPawn);

ブループリントでもSet Auto Manage Active Camera Target(または該当プロパティ)をfalseに設定することで同様の制御が可能です。ただし、この設定は「Possessしてもカメラを自動追従させない」ためのものなので、後から手動で視点を変えたくなった場合はSet View Target with Blendで明示的に指定する運用になります。

対処3:視点を明示的に固定・復帰させる(Set View Target with Blend)

すでに視点が動いてしまった、あるいは確実に元の視点へ戻したい場合は、Set View Target with Blendで視点の対象アクターを指定し直します。Blend Timeを0にすれば即座に、正の値にすればなめらかに視点が移動します。

ブループリントでの手順

  1. Get Player Controller(Player Index 0など)を取得する。
  2. Set View Target with Blendノードを呼ぶ。
  3. New View Targetに「視点を向けたいアクター」(=元のポーンや専用カメラ)を渡す。
  4. 即時に戻すならBlend Time0.0に設定する。

// 例:ポーンをスポーンしつつ、視点は既存のポーンへ固定する

APawn* NewPawn = GetWorld()->SpawnActor<APawn>(PawnClass, SpawnLocation, SpawnRotation);

 

APlayerController* PC = GetWorld()->GetFirstPlayerController();

if (PC && ExistingPawn)

{

    // 既存のポーンに視点を即時固定(Blend Time = 0)

    PC->SetViewTargetWithBlend(ExistingPawn, 0.0f);

}

専用のカメラアクター(Camera Actor)をレベルに置き、その視点を固定したい場合は、New View Targetにそのカメラアクターを渡します。View Targetは「カメラそのもの」ではなく「視点の基準となるアクター」を指定する点に注意してください(指定したアクターのカメラ計算ロジックに基づいて最終的な画が決まります)。

よくある落とし穴
  • Auto Possess PlayerとAuto Possess AIの混同:プレイヤー視点に関わるのはPlayerのほう。AIだけを使いたいのにPlayerが「Player 0」になっていると視点が移る。
  • レベルに配置済みのポーンとスポーンするポーンの設定差:エディタ上で個別にAuto Possess Playerが上書きされていることがある。クラスのデフォルトだけでなく、配置インスタンスのDetailsも確認する。
  • どこかでPossessが呼ばれている:BeginPlay、レベルブループリント、別のロジックなどでPossessが走っていないかを点検する。自動占有を消しても他所でPossessされていれば視点は移る。
  • UnPossessとSet View Targetの同フレーム実行:同じフレームでUnPossessとView Target変更を行うと、視点指定が打ち消される報告がある。順序やタイミング(次フレームで設定する等)に注意する。
  • Auto Manage Active Camera Targetの効果範囲:これは「Possess連動の自動追従を止める」設定であり、明示的なSet View Target with Blendまでは止めない。両方の挙動を取り違えない。
  • View Targetにカメラコンポーネントが反映されない:ターゲットアクターのカメラ計算(カメラコンポーネントの有無やCalcCameraの実装)によって結果が変わる。期待どおりに映らない場合は対象アクターのカメラ設定を確認する。

方法の使い分け早見表

やりたいこと推奨アプローチ
スポーンしたポーンを操作・占有しないAuto Possess PlayerをDisabledにし、Possessを呼ばない
スポーンしたポーンをAIに動かすプレイヤーでPossessせず、AI Controller側に占有させる。
Possessは必要だが視点は変えたくないAuto Manage Active Camera Targetをfalseにする。
すでに移った視点を元へ戻す/明示的に固定するSet View Target with Blendで対象を指定(即時ならBlend Time 0)。

よくある質問(FAQ)

Q. Auto Possess Playerを「Disabled」にしたのに、まだ視点が切り替わります。
A. 別の箇所でPossessが呼ばれている可能性が高いです。BeginPlayやレベルブループリント、スポーン処理の続きなどを確認してください。また、レベルに配置済みのインスタンス側でAuto Possess Playerが個別に上書きされていないかも点検します。

Q. 操作対象は新しいポーンに移したいが、カメラだけ元の位置に残したい場合は?
A. Possessは行いつつ、Player ControllerのAuto Manage Active Camera Targetをfalseにして自動追従を止め、必要ならSet View Target with Blendで残したい対象(元のポーンや専用カメラ)を明示的に指定します。

Q. Set View Target with Blendで視点を戻しても、すぐ元に戻ってしまいます。
A. 同じフレームでのUnPossessや、その後のPossessによってView Targetが再計算され、上書きされている場合があります。処理順序を見直し、視点設定を最後に(あるいは次フレームで)行うと安定しやすくなります。Auto Manage Active Camera Targetの設定とも合わせて確認してください。

Q. Auto Possess PlayerとAuto Possess AIはどう違いますか?
A. Auto Possess Playerは、指定したプレイヤー(Player 0など)が自動でそのポーンを操作対象にする設定で、プレイヤー視点に直結します。Auto Possess AIは、AI Controllerによる自動占有を制御する設定で、プレイヤー視点には通常関係しません。視点問題の調査ではまずPlayer側を確認します。

まとめ

UE5でポーンをスポーンしても視点を切り替えない核心は、「操作対象(Possess)を変えない」「カメラの自動連動を意図的にコントロールする」ことに尽きます。実装の順序としては、(1)スポーンするポーンのAuto Possess Playerを「Disabled」にする、(2)不要なPossessを呼ばない(AIで動かすならAI Controllerへ)、(3)それでも視点制御が必要ならAuto Manage Active Camera TargetSet View Target with Blendで明示的に固定する、という流れが分かりやすいでしょう。挙動はプロジェクト設定やエンジンのバージョンによって差が出ることがあるため、重要な箇所は公式ドキュメントと実機での動作確認を行うことをおすすめします。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 床の上に乗ったらイベントを発生させる方法
  2. OverlapAllDynamicとOverlapAllの違い
  3. タイトル画面を作る方法
  4. サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
  5. ボタンに文字を記載する方法
  6. Event ActorBeginOverlapとOn Component Begin Overlapの違い
  7. キャラクターに特定のオブジェクトとの当たり判定を付ける
  8. 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
  9. 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
  10. 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
  11. Blenderファイルをインポートする方法
  12. 鏡を作成する方法
  13. レベルブループリントでキャラクターの出現を設定する方法
  14. サードパーソンテンプレートにおけるキャラクター出現の定義
  15. アイテムに近づいたらボタンを押してイベントを発火させる方法
  16. 画面の中央にメッセージを表示する方法
  17. どこからでも呼び出せるカスタムイベントを作成する方法
  18. カスタムイベントに引数を追加する方法
  19. 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
  20. オブジェクトに近づいている間だけメッセージを表示する方法
  21. PCの画面を操作するUIを作る方法
  22. コンテンツブラウザに画像を追加する方法
  23. SetInputMode_UIOnlyを取り消す方法
  24. 特定の画像の上にマウスカーソルを置いたら手マークにする方法
  25. オブジェクトがアウトライナーで選択できない原因と解決策
  26. PlayerStartを作成する方法
  27. メニュー画面を作成して開く方法
  28. 「Esc」キーを押してメニュー画面を開く方法
  29. イベントの「On Clicked」と「On Pressed」の違い
  30. 「Set Input Mode」の種類と使い方
  31. 「Set Game Paused」の使い方と詳細解説
  32. Motion Matchingとは?
  33. 「GameMode」と「GameModeBase」の違い
  34. マップに配置したTargetPointを取得する方法
  35. TargetPointにタグをつけて取得する方法
  36. Spawnしたインスタンスがイベントを実行する方法
  37. 特定の時間ごとに処理を実行する方法
  38. 数値をランダムで出力する方法
  39. ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
  40. MaxWalkSpeedを変更する方法
  41. しゃがむ動作を導入する方法
  42. キャラクターのアニメーションを設定する方法
  43. 導入済みのプラグインを確認する方法
  44. Motion Matchingの導入と必要なプラグイン
  45. プレイヤーを非表示にする方法
  46. カメラを傾ける角度を制限させる方法
  47. 配列からランダムに重ならない要素を特定の数取得する方法
  48. カメラの映す画面に文字やエフェクトを付ける方法
  49. キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
  50. プライマリーデータアセットを活用する方法
  51. プレイヤーのHPといった変数を定義する最適な場所
  52. カメラに映った画面をスクリーンショットとして保存する方法
  53. ゲーム内のカメラ映像を保存して再表示する方法
  54. HighResShot を使って高解像度の画像を保存する方法(UE5)
  55. HighResShotで保存した画像のファイル名を取得する方法
  56. SceneCapture2DとFrameGrabberの画像保存方法の比較
  57. SceneCapture2Dを使用して画像を保存・取得する方法
  58. HighResShotとTake High Res Screenshotの違い
  59. ゲーム終了ボタンを作成する方法
  60. 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
  61. 画面上にメッセージを指定された時間表示させる方法
  62. シェーダコンパイル時間を短縮する方法
  63. 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
  64. データベースを活用する方法
  65. UE5.5がインストールされた環境にUE5.4を追加で導入する方法
  66. World PartitionとWorld Compositionの違い
  67. オープンワールドテンプレートとは?
  68. ポーンをスポーンさせても視点を切り替えない方法
  69. キャラクター同士がすり抜けてしまう問題の解決方法
  70. キャラクターの外見を動的に変更
  71. World Partitionでインスタンスが「アンロード済み」になる問題
  72. データ アセットとデータ テーブルの違い
  73. コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
  74. エディターのソースコードの自動保存の頻度を高める方法
  75. SpawnActorでSpawn Transform Rotationが反映されない理由
  76. ミニマップを表示しポーンの位置を反映する方法
  77. RInterp ToとVInterp Toの違い
  78. 毎秒実行するイベントの定義方法
  79. Niagara のエフェクトにコリジョンを持たせる方法
  80. 「Overlap」と「Hit」の違い
  81. OverlapはあるがHitがない原因
  82. Overlapした位置の座標を取得する方法
  83. ブループリントでレベル間のパラメータを受け渡す方法

最近更新/作成されたページ