【Unity】Cinemachineカメラの移動範囲をコライダー内に制限する

Cinemachineでカメラが特定の領域から出ないようにするにはどうすればいいの?

CinemachineConfinerを使えば良いわ!

Cinemachineには、バーチャルカメラの移動範囲を特定のコライダー内に制限するCinemachineConfinerという機能拡張(Extension)が存在します。

参考:Cinemachine Confiner | Cinemachine | 2.8.0

CinemachineConfinerを用いると、次のようにカメラがコライダーの外に出ないようにできます。

ただし、指定できるコライダーの種類は限られており、複雑な形状には対応していません。複雑な形状内に範囲を制限したい場合は、逆にコライダー内にカメラが入らないようにするCinemachineColliderを検討するのが良いでしょう。

参考:Cinemachine Collider | Cinemachine | 2.8.0

CinemachineConfinerは3D2Dの2種類が存在します。本記事では3D用の機能の解説を行います。2D用の使い方は以下記事をご覧ください。

【Unity】Cinemachineで2Dカメラの表示範囲を制限する
本記事では、Cinemachineを用いて2Dゲームのカメラの表示範囲を制限する方法について解説していきます。なお、2DゲームにおけるCinemachineの基本的な使い方については、以下をご覧ください。 スポンサーリン ...

この作品はユニティちゃんライセンス条項の元に提供されています

動作環境
  • Unity2021.1.22f1
  • Cinemachine2.7.8

前提条件

予めCinemachineパッケージがインストールされ、バーチャルカメラの設定が済んでいるものとします。

設定方法がわからない方は、以下記事をご覧ください。

【Unity】滑らかに(遅れて)追従するカメラを簡単に実装する方法
Cinemachineを用いてキャラクターを追従するカメラワークを実装する方法の解説記事です。 キャラクターを追従するカメラワークはスクリプトでも実装できますが、Cinemachineを使うことで次のメリットが得られます ...

使用できるコライダーの種類

カメラの移動範囲の制限用としてCinemachineConfinerに指定できるコライダーは以下の3種類のみです。

  • BoxCollider
  • SphereCollider
  • CapsuleCollider

MeshColliderなど、上記以外のコライダーを指定しても機能が有効にならないためご注意ください。

コライダーの設定

カメラの移動範囲を制限するコライダーを配置します。

例では、Boxコライダーをシーン上に配置するものとします。

差し支えなければ、ColliderのIs Triggerにチェックを入れておきます。これは、予期せぬ物理演算を防ぐためです。 [1]

CinemachineConfinerの適用

バーチャルカメラコンポーネントのExtensions > Add Extensionから、CinemachineConfinerを選択します。

すると、CinemachineConfinerコンポーネントが追加されます。

ここにカメラの移動範囲を設定していきます。

Confine Modeには、3D、2Dのどちらのモードかを設定できます。ここでは、3DモードのConfine 3Dを選択することとします。

Bounding Volumeには、移動範囲を制限するコライダーを指定します。例では、先ほど作成したBox Colliderを設定することとします。

Dampingには、カメラが移動範囲を超えたときに、コライダー内に戻る素早さを指定します。デフォルト値の0だと一瞬で戻り、値が大きくなるほどゆっくりと戻るような挙動になります。

実行結果

コライダー内にカメラの移動範囲が制限されていることが確認できました。

さいごに

CinemachineConfinerのExtensionを用いると、バーチャルカメラの移動範囲を指定したコライダー内に制限することができます。

基本的に、Cinemachineのバーチャルカメラ自体は移動範囲を制限する機能を持たないため、バーチャルカメラ側で計算した座標をExtension側で書き換えることで、移動範囲を制限する動作を実現します。 [2]

CinemachineConfinerだけでは物足りない場合、独自のExtensionを作って独自の移動制限をさせることも可能です。

Extensionの作り方については、以下記事をご覧ください。

【Unity】Cinemachineをスクリプトで機能拡張する
Cinemachineはスクリプト無しでも様々なカメラワークが作れるのが特徴ですが、独自のスクリプトで機能拡張することで、更に凝ったカメラワークを作成する事も可能です。 これはExtension(拡張機能)としてコンポー ...

参考サイト