50.

UE5でメッシュ非表示後にカメラが動かない問題の原因と解決方法

編集

Unreal Engine 5(UE5)でキャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題は、多くの場合カメラやSpring Armといったコンポーネントを、非表示にしたメッシュ(Skeletal MeshやStatic Mesh)の子として接続していることが原因です。アクター単位やメッシュ単位での非表示処理が、子に接続されたカメラ系コンポーネントへ伝播(propagate)し、結果としてカメラの追従や更新が止まったように見えてしまいます。本記事では、非表示処理の仕組みを整理しながら、原因と具体的な対処方法を解説します。

この記事の要点
  • カメラやSpring Armをメッシュの子に接続していると、メッシュを非表示にした影響がカメラ側へ伝わり、視点が固定されたように見えることがある。
  • 「Set Actor Hidden In Game」はアクター全体を、「Set Hidden in Game」「Set Visibility」は対象コンポーネントを隠す処理で、いずれも「Propagate to Children(子に伝播)」の挙動を理解することが重要。
  • 対処の基本は、隠したいメッシュコンポーネントだけを対象に非表示にし、カメラ系コンポーネントを巻き込まない構成にすること。
  • カメラ系をルート(Capsuleなど)側に接続する、または「Owner No See」系の設定で見た目だけを消す方法も有効。
  • UE5のバージョンや構成によって挙動が異なる場合があるため、最終的には公式ドキュメントや実機での確認を推奨する。

問題の概要

UE5でキャラクターやメッシュを「非表示」にしたとき、見た目が消えるだけでなく、カメラがその場に固定され、移動やしゃがみなどに追従しなくなるという現象が報告されることがあります。特に、三人称視点や一人称視点でカメラをキャラクターのメッシュ配下に接続している構成で起こりやすい問題です。

この現象は「カメラそのものが壊れた」わけではなく、多くの場合非表示処理の対象範囲(スコープ)と、コンポーネントの親子(アタッチ)構造の組み合わせによって生じます。まずは非表示処理の種類を整理しましょう。

非表示処理の種類と違い

UE5でオブジェクトを非表示にする主な方法には、対象とする範囲が異なる複数の関数があります。混同しやすいため、違いを把握しておくことが解決の第一歩です。

関数・設定対象範囲概要
Set Actor Hidden In Gameアクター全体アクター単位でゲーム中の表示・非表示を切り替える。アクターに含まれるコンポーネント群に影響が及ぶ。
Set Hidden in Gameコンポーネント対象のScene Component(メッシュなど)をゲーム中のみ非表示にする。エディタ上の表示には影響しない。
Set Visibilityコンポーネント対象コンポーネントの可視性(Visible)を切り替える。一般にエディタとゲーム双方の見た目に関わる。

ここで重要なのが、「Set Hidden in Game」「Set Visibility」には子コンポーネントへ処理を伝える「Propagate to Children(子に伝播)」のオプションがあるという点です。これを有効にして親側のコンポーネントを対象にすると、その配下に接続されたコンポーネント(カメラやSpring Armを含む)まで処理が及ぶ可能性があります。

カメラが動かなくなる原因

カメラが固定されて見える主な要因として、次のようなパターンが考えられます。プロジェクトの構成によって、どれが該当するかは異なります。

原因1:カメラ・Spring Armをメッシュの子に接続している

カメラやSpring Armを、非表示にするメッシュ(Skeletal Meshなど)の子としてアタッチしている場合、メッシュを対象にした非表示処理がそのまま子のカメラ系へ伝播する構成になりがちです。見た目を消す目的の処理が、結果としてカメラ系コンポーネントの状態にも影響し、視点が追従しなくなったように見えることがあります。

原因2:アクター単位で非表示にして子をまとめて巻き込む

「Set Actor Hidden In Game」はアクター全体を対象とするため、そのアクターに属するコンポーネントが広く影響を受けます。メッシュだけを消したいのにアクターごと非表示にしてしまうと、意図せずカメラ系まで巻き込み、想定外の挙動につながることがあります。

原因3:伝播オプション(Propagate to Children)の付け忘れ・付けすぎ

「Propagate to Children」を有効にした状態で上位コンポーネントを対象にすると、子のカメラ系まで処理が伝わります。逆に、伝播を意図せず有効化していたり、対象コンポーネントの選択を誤っていたりすると、狙った範囲と実際の処理範囲がずれ、カメラ側が影響を受けることがあります。

対処方法

対処1:隠したいメッシュコンポーネントだけを対象にする

最も基本的な対処は、アクター全体ではなく非表示にしたいメッシュコンポーネントだけを対象に非表示処理を行うことです。「Set Actor Hidden In Game」でアクターごと隠すのではなく、対象のMeshコンポーネントに対して「Set Hidden in Game」または「Set Visibility」を呼び出します。

この際、「Propagate to Children」を無効(チェックを外す)にしておくと、子に接続されたカメラやSpring Armへ処理が伝播しにくくなります。ただし、メッシュ配下にさらに別のメッシュ(武器・装備など)を接続していて一緒に消したい場合は、伝播の要否を構成に合わせて判断してください。

// メッシュコンポーネントだけを非表示にする例(Blueprint上のノード操作イメージ)

Target: Mesh(Skeletal Mesh Component)

Node : Set Hidden in Game

New Hidden : true

Propagate to Children : false

対処2:カメラ系コンポーネントの接続先を見直す

カメラやSpring Armをメッシュの子ではなく、ルート側(Capsule ComponentやSceneのルートなど)に接続しておくと、メッシュの非表示処理の影響を受けにくくなります。カメラ系を移動・回転の基準となるルート側にぶら下げることで、メッシュを消してもカメラの追従が維持されやすくなります。

典型的な構成例は次のとおりです。構成を変更する際は、相対位置(Location/Rotation)がずれないよう調整してください。

Capsule Component(ルート)

 ├─ Mesh(非表示の対象にする)

 └─ Spring Arm

     └─ Camera

対処3:見た目だけを消したい場合の「Owner No See」系設定

たとえば一人称視点で「自分には自分のフルボディメッシュを見せたくない」といったケースでは、コンポーネントを論理的に非表示にするのではなく、レンダリング上で所有者から見えないようにする設定を使う方法もあります。Mesh側の「Owner No See」を有効にすると、所有プレイヤーの視点でそのメッシュが描画されなくなります(他者からは見える設定にもできます)。

この方法は、コンポーネントの可視状態そのものを切り替えるのではなく描画の見え方を制御するため、カメラ系の挙動を巻き込みにくいのが利点です。ただし「Owner See No Mesh」「Only Owner See」などの関連設定との組み合わせで挙動が変わるため、目的に合わせて設定を確認してください。

対処4:それでも追従しない場合の補助手段

構成変更が難しい場合の補助的な手段として、Tickなどでカメラ(またはSpring Arm)の位置を基準位置へ更新する方法があります。ただしこれは根本原因(接続構造や非表示スコープ)への対処ではなく対症療法であり、まずは対処1・2で構造を整えることを推奨します。

// 補助的にカメラ位置を更新するイメージ(恒久対処ではない)

Event Tick -> Set World Location

Target : Spring Arm / Camera

New Location : 基準(Capsuleなど)の位置を取得して設定

落とし穴と注意点

つまずきやすいポイント
  • アクター単位で隠すと子も巻き込む:「Set Actor Hidden In Game」はアクター全体が対象になるため、メッシュだけを消したい場面では意図せずカメラ系まで影響することがある。
  • 「Propagate to Children」の挙動:有効・無効で処理範囲が変わる。狙った範囲だけに効くよう、対象コンポーネントと伝播設定の両方を確認する。
  • 当たり判定(コリジョン)は別物:非表示(Hidden / Visibility)は見た目の制御であり、コリジョンは別設定。当たり判定まで消したい場合は別途コリジョン側の設定が必要になる。
  • カメラ系を移動の基準から外さない:カメラやSpring Armを、移動・回転の基準となるコンポーネント(ルート側)から切り離すと追従が崩れやすい。
  • バージョン差・既知不具合:UEのバージョンや構成により挙動が異なる場合がある。特定バージョンで伝播や復帰に関する不具合が報告されることもあるため、最新の公式情報を確認することが望ましい。

よくある質問(FAQ)

Q1. メッシュを非表示にしたら当たり判定も消えますか?

いいえ。「Set Hidden in Game」や「Set Visibility」は基本的に見た目(描画)の制御であり、コリジョン(当たり判定)はそれとは別の設定で管理されます。当たり判定も無効にしたい場合は、コリジョン関連の設定を別途変更する必要があります。逆に言えば、見た目だけ消してもブロック挙動などはそのまま残る点に注意してください。

Q2. カメラをメッシュの子にしてはいけないのですか?

必ずしも禁止ではありませんが、そのメッシュを非表示にする運用がある場合は注意が必要です。メッシュを消す処理がカメラ側へ伝播しないよう、伝播設定や対象コンポーネントの選択を適切に行うか、カメラ系をルート側に接続する構成にしておくと安全です。アニメーションでカメラを揺らしたいなどの理由で意図的にメッシュ配下へ置く場合は、非表示処理との相性を踏まえて設計してください。

Q3. 一人称視点で自分のメッシュだけ消したいときの推奨は?

論理的に非表示にするとカメラ系を巻き込むリスクがあるため、Mesh側の「Owner No See」などレンダリング上の設定で所有者からの描画を抑える方法が検討に値します。これによりカメラの追従を保ったまま、自分視点でのみメッシュを見せない構成にしやすくなります。関連する可視設定の組み合わせは、実機で確認しながら調整してください。

まとめ

UE5でキャラクターやメッシュを非表示にした際にカメラが動かなくなる問題は、非表示処理の対象範囲とコンポーネントの接続構造に起因することが多い現象です。対処の基本は、(1) 隠したいメッシュコンポーネントだけを対象にする、(2) カメラ系をルート側に接続して巻き込みを避ける、(3) 必要に応じて「Owner No See」など描画側の設定を使う、という三点です。「Set Actor Hidden In Game」「Set Hidden in Game」「Set Visibility」と「Propagate to Children」の違いを理解したうえで、プロジェクトの構成に合った方法を選択してください。なお、UEのバージョンや実装によって挙動が変わる場合があるため、最終的な確認は公式ドキュメントや実機テストで行うことを推奨します。

編集
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. ブループリントでレベル間のパラメータを受け渡す方法

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