カメラシステム Cinemachine導入【URP】

unity技術

シネマシーンは、プログラムを一切書かずに、自動カメラワークを作れるカメラシステムです。

  • カメラは1つ、頭脳を切り替える
    メインカメラは動かさず、
    設定(ルール)を持った「仮想カメラ(Cinemachine Camera)」を切り替える・混ぜることで画面を作ります。
  • Unity 6で劇的進化
    古いバージョン(v2)から設計が一新され、より整理された構造(v3)になりました。
  • URPとの連動が命
    画面の美しさ(エフェクト)やカメラのブレを、URPの機能とセットで簡単に制御できます。

実際には、
キャラクターの動きに合わせた「ブレ防止」、
壁にめり込まない「自動回避」、
状態に応じた「アングルの自動変更」までを自動化するゲームの演出エンジンです。

導入方法

PackageMnager」から「Chinemachine」をインストールします。
手順はこれだけです。
インストールが成功すると、PackagesフォルダにChinemachineフォルダが追加されます。

メインカメラに自動で「ChinemachineBrain」コンポーネントが追加され、
右側にシネマシーンアイコンが表示されるようになります。

設置方法

ヒエラルキー部分でメニューを出し「Cinemachine」>「CinemachineCamera」を作成します。
任意のカメラ名に変更して完了です。

カメラ移動アングル変更する際は「CinemachineCamera」を増やしてそのカメラの設定を変更します。
例えば、
x0のシネカメラ1とx50のシネカメラ2を設置すると、自動でx0 → x50まで移動するようになります。

「秒数」や「イージング」の管理

1. グローバル設定(Default Blend):
Main Camera に付いている Cinemachine Brain コンポーネント内の Default Blend セクションで設定します。
これが DOTween でいう duration と easeType の全体デフォルトになります。

2. イージングの対応:
DOTween の Ease.InOutQuad などは、Cinemachine の Ease In Out スタイルが相当します。
より細かく制御したい場合は、Style を Custom にすることで、
Unity 標準の Animation Curve(グラフ編集)で自由なカーブを作成できます。

3. 秒数の対応:
Default Blendの右側に「s」があります。
数値を変更することにより一括で秒数が設定されます。

3. 個別設定(Custom Blends):
「このカメラからあのカメラへの移動だけ特殊にしたい」という場合は、
Cinemachine Brain の Custom Blends プロパティにある
Create Asset ボタンから Blender Settings アセット を作成します。

  • このアセットを開くと「From (どのカメラから)」「To (どのカメラへ)」「Style (イージング)」「Time (秒数)」のリストを作成できます。
  • 今回のような「後ろ ➔ 右 ➔ 左正面」といった経由が必要な特殊ルートの秒数調整も、ここで行うのが最もクリーンな設計です。

Cinemachine のブレンドスタイル解説表

Cinemachineの設定名挙動の特徴類似項目
Cut0秒で瞬時に切り替わります(補間なし)。アニメーション自体がない状態
Ease In Out最もスタンダード。
動き始めが滑らかに加速し、
目的地の直前で滑らかに減速します。
イン・アウト(加速して減速)
(Quad、Cubic、QuintなどのInOut系)
Ease Inゆっくり動き始め、
最高速のまま目的地にドスンと到達します。
単体では不自然になりがちです。
イン(加速)
(Quad、Cubic、QuintなどのIn系)
Ease Out最高速からスタートし、
目的地に向けて徐々にブレーキがかかります。
アウト(減速)
(Quad、Cubic、QuintなどのOut系)
Hard InEase In よりもさらに急激に加速する、
鋭いカーブです。
イン(加速)の中で最も変化の急激なもの
(Quint In や Expo In に近い)
Hard OutEase Out よりも
さらに急激にブレーキがかかります。
アウト(減速)の中で最も変化の急激なもの
(Quint Out や Expo Out に近い)
Linear加減速が一切ありません。
常に同じ速度(等速直線運動)で動きます。
リニア(等速)
Custom自分でカーブの形を編集できます。設定次第ですべての波形を再現可能

パフォーマンス的な負荷

CinemachineCamera」を増やしていくことへのパフォーマンス影響は、
DOTweenで1つのカメラを動かす場合とほぼ同等か、むしろCinemachineの方が軽くなる瞬間もある
というのが、Unity 6における技術的な結論です。

なぜCinemachineカメラを量産しても重くならないのか?
理由:Cinemachineの Cinemachine Camera(旧Virtual Camera)が「本物のカメラではないから」です。

1. 実際にレンダリングしているのは「メインカメラ1つ」だけ
Unityにおいて最も負荷が高いのは「カメラが捉えた3D空間を画面に描き出す処理(レンダリング、ポストプロセス、カリングなど)」です。

  • DOTween方式: メインカメラ(本物)が1つ。
  • Cinemachine方式: メインカメラ(本物)が1つ + Cinemachineカメラ(偽物)が4つ。

Cinemachineのカメラは、
Unityにとってはただの「座標と画角のデータを持ったただの軽いスクリプト(GameObject)」に過ぎません。
レンズもなければ、描画する機能も持っていません。

メインカメラに付いている Cinemachine Brain という管理者が、
「今は1番優先度(Priority)が高い、この偽物カメラの座標と画角をコピーしよう」と処理しているだけです。
そのため、シーンに100個配置しようが、メモリや計算の負荷はごくわずかです。

2. DOTweenよりも「軽快」になり得る理由
DOTweenで毎フレーム transform.position を書き換える場合、
C#(スクリプト層)からUnityのネイティブコア(C++層)へ毎フレーム座標を送り続けることになります。
(これをコンポーネントの書き換えオーバーヘッドと言います)
一方、
CinemachineはUnityのネイティブエンジン側と深く統合されているため、
カメラの座標更新やブレンド計算の処理が最適化されています。
特にUnity 6(6000.3)のCinemachine v3では内部アーキテクチャが刷新され、さらに動作が軽量化されています。

個別設定

Custom Blends(アセットによるカメラペア管理)

AというカメラからBというカメラへ行く時だけ、特別な秒数やイージングにしたい」という場合の王道です。
Cinemachine BrainCustom Blends プロパティから
Cinemachine Blender Settings というアセット(ファイル)を作成します。

1. 作成したアセットのインスペクターで ボタンを押します。
2. 以下のように「特定のカメラ間のルール」を指定します。
From:CM_Cam_Front
To:CM_Cam_Left
Style:Linear(ここだけ等速にする、など)
Time:0.5s(ここだけ素早く動かす、など)

  • ワイルドカード指定が可能:From を ANY CAMERA にして、To を CM_Cam_Back にすれば、「どこから来ようとも、後ろ(Back)を向く時だけは1.5秒かけてゆっくり回る」といった、キャラクターの感情表現や演出に合わせた個別上書きが簡単に設定できます。
  • スクリプト側は、ただ Priority を変えるだけで、シネマシーンが自動的にこのアセットから最適なブレンドルールを探して適用してくれます。

DOTweenでの微調整

ターゲットをアサインする際、メインカメラではなくシネマシーンカメラのほうを指定します。

従来のDOTweenは、
メインカメラ(Main Camera)のTransform(座標・角度)を直接書き換えて移動させていました。

しかし、Cinemachineを導入したことで、メインカメラの制御権はすべて Cinemachine Brain に乗っ取られています。
Cinemachine Brain は、
現在アクティブなシネマカメラ(偽物)の座標を、毎フレーム強制的にメインカメラ(本物)に上書きコピーする
という処理を行っています。

そのため、DOTween がメインカメラの座標をいくら動かそうとしても、
直後のフレームでCinemachineによって元の位置に強制的に引き戻されて(上書きされて)しまうため、
画面上では1ミリも動かないように見えます。

コメント