この記事はUnreal Engine (UE) Advent Calendar 2025の13日目の記事です!今年も沢山の方が参加してくれて嬉しい!ありがとうございます!!!
はじめに

Gameplay Cameraという新しいカメラシステムがUE5.5にてExperimental機能としてリリースされ、UE5.8では遂にBeta機能になる(はず)ということをご存知でしょうか?
他の機能と比べるとあまり話題にはなっていませんが、UE5.5-5.7で改良を重ねたことで機能が豊富になってきたり、GameAnimationSampleにおけるカメラ制御がGameplayCameraに完全に置き換わっていたりと、今後のUE開発にてほぼ必須になりそうな気配を感じるこの頃です(制作者が以前にFrostbiteエンジンでカメラシステムを作っていたり、既に複数のゲームスタジオで実践導入 & FBを受けていることも期待できるポイント)。
が、公式ドキュメントの内容がUE5.5時点のもので止まっていたり、UE5.5→5.6への更新時に入った大規模な変更によって情報が錯綜していたりと、現状はとっつきづらい状況になってしまっています。
そこで、本記事ではUE5.7時点におけるGameplay Cameraの概要・Tipsについて纏めてみます。UE5.7→UE5.8でBeta機能になることで変化する部分は確実にありますが、概念や基本的な考え方は変わらないと思うので、今まとめても損はないはず…の精神でいきます!
といった方針の記事 & 既にGameAnimationSampleという最高のサンプルがあるので、具体的な操作手順に関してはあまり触れません。サンプルや今後の機能更新を読み解く上での前提知識・参考情報の共有がメインになります。
参考
【オススメ】GameplayCameraの作者が書いているブログ記事 https://ludovic.chabant.com/blog/category/programming/game-development/unreal-engine/
【オススメ】GameAnimationSample ( /Content/Blueprints/Cameras 以下)
https://www.fab.com/ja/listings/880e319a-a59e-4ed2-b268-b32dac7fa016
UE5.6 || UPDATES For New Gameplay Cameras System In Unreal Engine https://youtu.be/hl6smRV9Tr8?si=UKOd6YIbVcMFh_ZA
UE5.5 リリースノート https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5-5-release-notes?application_version=5.5#ゲームプレイカメラ
UE5.6 リリースノート https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5-6-release-notes?application_version=5.6#ゲームプレイカメラ(実験的機能))
UE5.7 リリースノート ( Gameplay - Cameras ) https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5-7-release-notes#gameplay-2
Gameplay Cameraとは?
ノードベース & データドリブンで カメラ制御を実装・管理できる機能であり、プログラマ・専門家でなくても(ある程度)複雑なカメラ制御の実現を可能にします。

従来は、PawnやCharacter BPにCamera・CameraBoomコンポーネントを持たせ、そのBP内でカメラ制御の実装をする所からスタートすることが多かったと思います。
しかし、パラメータを調整するにはBPを直接編集する必要があったり、カメラを使うキャラ・場面毎に設定・実装をし直す必要があったりと、プロジェクトがある程度進行したタイミングで問題に直面します。
その結果、 DataTable・Assetなどでパラメータを外部に出したり、BP・C++で独自にカメラシステムを作ったりとしていくと…ブラックボックス化が進み、担当プログラマ以外は触れない状態になりがちです…

こうした問題を解決するのが Gameplay Camera機能です!
専用のノードエディタと豊富な標準機能を用意することで、専門家でなくてもカメラ制御を実装することが可能になります。また、実装・パラメータを専用アセットで管理することで、Pawn・Characterへの依存度をなくなることで再利用性が高まり、開発効率が向上します!

…といった話はUE開発者の方は何度も聞いたことがあるかと思いますが、Gameplay Cameraも同様で
- データドリブン(データを変えるだけで振る舞いが変化)
- モジュラー設計(一度作った実装を再利用可能)
- デザイナーフレンドリー(プログラマ以外でも実装・調整可能)
を実現するための機能であり、他の機能と同様に「カメラ制御ってどうすればいいかわからん…」という方向けの機能だと思います!
Gameplay Cameraの基本構成

Gameplay Cameraは以下の4要素で構成されています。
- Gameplay Camera Component
- Camera Asset
- Camera Director
- Camera Rig
説明の流れの都合で、4, 3, 2, 1 の順で説明していきます。
Camera Rig

専用のノードエディタを使って、カメラの挙動・パラメータをどう制御するかを実装・定義するアセットです。各ノードを組み合わせることで、「3人称視点用」「1人称視点用」「3人称視点 & しゃがみ用」…などバリエーションを作っていきます。
例えば、↑に載せたGameAnimationSample の CameraRigPrefab_BasicThirdPersonBehaviorでは下記ノードを組み合わせることで、カメラの挙動・パラメータを制御しています。
- Offset
- カメラの位置・向きのオフセット
- Boom Arm
- プレイヤーの入力に応じたYaw/Pitch 回転
- Dampen Position
- カメラ移動の補間処理
- Field Of View
- 視野角・画角
- Post Process
- ポストプロセス設定

この他にも専用ノードは数多くあり、UE5.7時点だと合計40個のノードが用意されています。これらを自分で作るのは骨が折れるので、標準で用意されているのは嬉しいポイントです。なお、もし独自にノードを作りたい場合はUCameraNodeを継承して作ることになります(UOffsetCameraNodeやUSetLocationCameraNode辺りがシンプルなので、まずはそこから真似するのがオススメ)。

Camera Rigでは、別のCamera Rigに切り替えた際のTransition(カメラブレンド)処理も実装・定義可能です。↑の例では、「編集しているCamera Rigアセットに切り替わる際、SmoothStep形式を1秒かけてブレンドを行う」を実装しています。

このTransition用のノードも標準で幾つか用意されていて、位置・向き・中心毎に別のブレンド処理を走らせたりなど複雑なブレンドも実装できます。

また、数は少ないですが、Transitionを行うか否かの判定用のノードもあります。この辺りはルールをしっかり決めておかないと、Camera Rigが増えた際に意図せぬTransitionが発生しそうです。

なお、CameraRigアセットは 「Gamplayカテゴリ → CameraRig」から作成可能です。
Camera Director

ゲームプレイ中に「どの Camera Rigがアクティブであるか?」を選択するためのアセットです(Camera Directorが監督であり、Camera Rigはカメラマンとすると想像しやすいかも)
Camera Directorには以下の3タイプがあります。
Single Camera Director- 選択ロジックを含まず、一つの
Camera Rigしか使わない
- 選択ロジックを含まず、一つの
Blueprint Camera Director- BPノードでCameraRigの選択処理を実装
State Tree Camera Director- State Treeを使ってCameraRigの選択処理を実装
それぞれ説明すると脱線 & 長くなってしまうので、ここではBlueprint Camera Directorについて説明します。

Blueprint Camera Directorでは、プレイヤーの入力情報やゲームの状況などを取得し、それらの結果に応じたCamera Rigをアクティブにします( Activate Camera Rig関数を使用)。
上の画像はUE5.6版のGameAnimationSampleから持ってきたものです。Camera Director用のTick処理であるRun Camera Directorにて、CharacterBP側で用意したInterface関数を通してプレイヤーの入力状況を取得し、それによってActivateするCamera Rigを変えています。
なお、説明しやすいようにUE5.6版の実装を使いましたが、Enum & Switchノードを沢山使う実装方法はノードが複雑になりがちなのでオススメしません。UE5.7版ではChooserを使うことでシンプル かつ 汎用性を高めているので、そちらを参考にしたほうがいいと思います。

また、Tickではなく単発処理で良い場合は、Activate Camera Director イベントにCameraRigのActive処理を繋げればOKです。

どのCamera Rigを選択するかの判断材料を「誰が」「どのように」計算・管理するかは悩み所ですが…少なくともCamera Director内でゴリゴリと計算するよりは他の箇所での計算結果を使うだけ、の方が実装がシンプル & 応用が効きそうな気がしてます。なお、GameAnimationSampleの場合は、キャラクターBP(SandboxCharacter_CMC)がその役目を担っています。

ちなみに、Blueprint Camera DirectorはBPクラスの作成メニュー、または後述の Camera Asset における Director Class 設定UIの+ボタンから作成可能です。
https://ludovic.chabant.com/blog/2025/05/05/ue-gameplay-cameras-the-basic-design/
少し内部実装の話をすると、Camera Directorが新たに選択したCamera RigはBlend Stackに積まれます。そして、BlendStackは積まれたCamera Rigを順に処理をしていきます。正直な所、まだ僕自身も処理を追いきれてないのですが、気になる方はFCameraSystemEvaluator、 UDefaultRootCameraNode、UBlendStackCameraNode 辺りの処理から探っていくことになりそうです。
Camera Asset

Camera Director / Rigアセットへの参照と共通のTransition設定を管理するためのアセットです。アニメーションエディタのように、右上にある各ボタンからCamera Director / Rig アセットを開くことができるので、編集作業の起点として使いやすいです。
ただし、UE5.7時点ではここに並ぶのはハード参照なアセットのみであり、サンプルのようにChooserTableを経由している場合はここに並びません。この問題はUE5.8で改善されるようです(https://ludovic.chabant.com/blog/2025/11/14/ue5-gameplay-cameras-upgrading-to-5-7/)

また、Shared Transitionと呼ばれる「CameraRig側で設定されていない場合に実行されるカメラブレンド」をCamera Assetで実装することが可能です。Camera Rig側で全てのTransitionを設定するのは作業が大変すぎるので、共通・汎用的なものはShare Transitionに集約 & 特殊なものだけCamera Rig側で実装などの戦略が必要になってきそうです。

なお、Camera AssetはGameplay → Camera Asset から作成できるのですが、その際に使用するCamera Directorの種類を選ぶことになります。

説明で利用したのはBlueprint Camera Directorを選択した場合でしたが、SingleCameraDirectorを選んだ際は使用するCamera Rigを直接指定することになります(Camera Rigの選択ロジックが不要の場合に利用)。
Gameplay Camera Component

従来のCamera Componentのように、PawnやCharacterなどに持たせるComponentです。そのため、GameplayCameraに移行する場合はこのComonentへの差し替え作業が発生します。
Gameplay Camera Componentでは Camera Asset の設定のみをすればOKです。全てCamera Rig側で設定を行うため、Camera Boom(SprintArm)の設定は不要ですし、Gameplay Camera Componentの 位置・向きの設定も不要です。これでBP側での実装・設定はかなりスッキリしていい感じです。

なお、このGameplay Camera Componentを実際のゲームカメラで使用されるようにするには、Auto Activate for Player を Player 0 にするか、Activate Camera for Player Controller 関数を呼ぶ必要があります。

少し長くなったので改めてまとめると、Gameplay Camera は
- Gameplay Camera Component
- Camera Asset
- Camera Director
- Camera Rig
の4要素で構成され、それぞれは上図の役割を持ちます。慣れない間は実装・設定が分散されていて把握しづらい部分もありますが、作業分担・再利用が格段にしやすくなるので個人的には超オススメの機能です。
便利機能・Tipsの紹介
これまではGameplay Cameraの基本機能・要素について説明してきましたが、他にも説明すべき便利機能はたくさんあるので、ざっと紹介していきます!
Camera Rig Prefab

特定のCamrea Rigで実装した処理を、別のCamera Rigで流用するためのノードです。流用する際はパラメータを上書き可能なため、バリエーション違いのCamera Rigを作る際に非常に便利です。

例えばGameAnimationSampleでは、三人称視点のベースとなるCamera Rig「CameraRigPrefab_BasicThirdPersonBehavior」をCamera Rig Prefabノードで流用することで、カメラ距離違いや肩越し視点などのバリエーション違いを簡単に実装しています。流用元のCamera Rigに追加実装・修正したら、流用先にも自動的に適応されるのも良いポイントです。
GameplayCameraの強みを活かすためにも、特にCamera Rigの数が増えそうなプロジェクトの場合では積極的に使っていきたい機能です。
Blendable Parameter と Data Parameter

Camera Prefabノードにて上書き可能にしたい設定はパラメータ化する必要があります。といっても簡単で、BPのようにパラメータを追加し、Camera Rigで使っているノードの引数ピンに繋げるだけです。
パラメータにはBlendable ParameterとData Parameterの2種類があり、違いは扱うデータの種類と、カメラ遷移時の挙動です。
- Blendable Parameter
- Data Parameter
Pre-Blending

Blendable Parametersに Pre-Blend という項目がありますが、これは Pre-Blendingと呼ばれる機能を使うか否かを設定するものです。

通常のブレンドの場合、各Camrea Rigを別々に計算した結果をブレンドします。この方法で概ね動作はするのですが、Camera Rig A / Bがほぼ同じロジック(=使用するパラメータ・ノードが同じ)の場合、カメラブレンドの結果が奇妙な結果になることがあります。
PreBlendingは、Camera Rig自体の計算を行う前に各CameraRigが持つパラメータのブレンド処理を行うことで、最終的なブレンド結果の精度を上げます。DeadZoneを使った具体的な例・動画は下記ブログにあるので、気になる方はぜひ見てみてください。 https://ludovic.chabant.com/blog/2025/02/10/ue5-gameplay-cameras-pre-blending/
なお、UE5.7ではデフォルト無効になっていますが、これはbool型のプロパティにおける不具合と後方互換性との兼ね合いのようです。 https://ludovic.chabant.com/blog/2025/11/14/ue5-gameplay-cameras-upgrading-to-5-7/

また、CameraRigMergeという面白い機能もあります。これは、ブレンドするCamera Rigが同じCamera Rigアセットをベースにしている場合、BlendStack上で2つをマージしたものをブレンド計算に使うというものです。この結果、CameraRig自体の計算を一つに減らすことができます。
現状はPreBlendingはほぼ同じロジックを使っている時しか使えませんが、将来的には使用しているノードが同じなら可能にする計画があるようです。楽しみ!
https://ludovic.chabant.com/blog/2025/02/10/ue5-gameplay-cameras-pre-blending/
パラメータの動的変更
CameraRigのパラメータをゲームプレイ中に動的に変更することが可能です。この辺りはUE5.8で色々変わりそうな雰囲気があるので、深追いはせずにサラッと説明します。 https://ludovic.chabant.com/blog/2025/11/14/ue5-gameplay-cameras-upgrading-to-5-7/

まずは、GameplayCameraComponentからCameraDataを取得し、それに対して指定パラメータのGet / Setノードを使う方法があります。CameraDataの取得ノードは2種類あり、違いは以下の通り。
- Shared Camera Data
- 現在実行している全てCamera Rigに対して、同じ名前のパラメータがあれば値を適用例:すべてのカメラで共通して使いたい「全体的なズーム倍率」など,。
- Conditional Camera Data
- 現在アクティブなCamera Rigに対してのみ値を適用

複数のCameraRigに対して共通のパラメータ管理をしたい場合は、CameraVariableCollectionを使う方法がオススメです。
CameraVariableCollectionに追加したパラメータは、CameraRigノードのプロパティに紐づけることができます(この紐づけ方、GameplayCamera以外でも使いたいなぁ…)。

そして、GameplayCameraComponentから取得したCamera Data とCameraVariableCollectionから指定パラメータのGet・Set処理を呼び出すことができます。

余談ですが、UE5.6時点ではゲーム実行中にCameraVariableCollectionの値をエディタ上で変更しても反映されなかったのですが、UE5.7では反映されるようになってすごく嬉しい(BPで無理やり同期をとって何とかしてたので…)
Camera Rig Layer

Camera Rigにはレイヤー構造(Base, Main, Global, Visual)の概念があり、Camera Directorにてアクティベートする際に使うノードによって異なるレイヤーで管理・処理されます。
各レイヤーの処理順・属性は以下の通り
| 順序 | タイプ | 用途例 | |
|---|---|---|---|
| Base Layer | 1 | Additive Persistent | 常に適応されるカメラ設定・挙動(例:呼吸による揺れ・手ブレ) |
| Main Layer | 2 | Isolated Transient | メインのカメラ挙動 |
| Global Layer | 3 | Additive Persistent | メインのカメラ挙動に上乗せするエフェクト(例:カメラシェイク) |
| Visual Layer | 4 | Additive Persistent | 最終的な見た目調整(例:ポストプロセス) |
タイプの違いに関して
- Isolated Transient
- BlendStack内の各Camera Rigは独立して評価され、ウェイトに基づいてブレンドされる
- 新しいCameraRigが追加され、そのブレンド率が100%になると自動的にBlendStackから取り除かれる
- Additive Persistent
- BlendStack内の各Camera Rigは加算式に評価される(CameraRigの計算結果が、次のRigの入力になる)。リレー形式で値を加工していくイメージ
- 明示的にDeactivateが呼ばれない限りは、BlendStackに残り続ける(=計算される)

なお、GameAnimationSampleでは、GlobalとBaseをこのように使い分けていたりします(途中で切り替える必要がないので、Activate Camera Directorで実行)。
Camera Debugger

Gameplay Camera専用のデバッグ機能も用意されており、エディタ上部の Tools → Debug → Camera Debuggerから開けます。

このデバッグ機能では、現在動作している各Camera Rigの情報(計算結果、パラメータの現在地)、ブレンド率、各Layerの状況などを確認できます。

ゲームプレイを記録・再生できるRewind Debuggerと連携しているので、カメラ挙動の調整・不具合調査をする際に非常に便利な機能です。

ちなみに、UE5.7からは複数のGameplay Cameraが動作している際に、どのカメラをデバッグ対象にするかを選択可能になりました。やったね
Occulusion Material ノード

最後に紹介するのは、CameraRigノードの1つであるOcculusion Material ノード。
これはカメラとターゲットの間に壁や柱などのオブジェクトが入り込んだ際、それらのオブジェクトに対して特定のMaterialを適用することで、プレイヤーの視界を確保するためのものです。上の動画は、分かりやすいように「Emissive: 0, Opacity : 0.5」のMaterialを設定しています。
内部処理はシンプルで、ノードに設定したターゲット・コリジョン設定に基づいてSphare Sweep Traceを行い、ヒットしたStaticMeshComponentに対してMaterialの置き換えを行っています。
カメラを遮蔽するオブジェクト問題に対して「コリジョンを使った押し出し」を使うことは多いですが、カメラが急激に動いたり、小さな小物に反応して高頻度に押し出しが発生すると酔ってしまうことが多いです。コリジョン設定を丁寧にする必要はありますが、このOcculusion Materialノードをうまく使うことでそういった問題を解決できそうです。
おわりに
他にも色んなCamera Rigノードがあったり、Sequencerとの連携など気になる所もあると思いますが、永遠の記事が終わらなくなるので一旦ここまで…!(興味がありそうな方が多ければ、その辺りや具体的な設定例とか記事にできればなぁと思ってます)。
これまで独自にカメラ制御を作る必要があった関係で、なかなかノウハウ・知見の共有が難しかったかと思うので、UE公式でしっかりとしたカメラシステムがリリースされるのは結構楽しみです!カメラ制御に関しての色んな知見・アセットが集まって、少しでも実装が楽になったり、ユーザが遊びやすい・酔わないカメラ制御が当たり前になったらいいなぁと期待してます。
明日の記事担当はキンアジちゃんです!「【UE5】エディタ上でName/Stringプロパティを使いやすくしようと思った話🐟」ということで、めちゃめちゃ楽しみです…!https://qiita.com/advent-calendar/2025/ue
おしまい