Cinemachineでカメラが特定の領域から出ないようにするにはどうすればいいの?
CinemachineConfinerを使えば良いわ!
Cinemachineには、バーチャルカメラの移動範囲を特定のコライダー内に制限するCinemachineConfinerという機能拡張(Extension)が存在します。
参考:Cinemachine Confiner | Cinemachine | 2.8.9
CinemachineConfinerを用いると、次のようにカメラがコライダーの外に出ないようにできます。
ただし、指定できるコライダーの種類は限られており、複雑な形状には対応していません。複雑な形状内に範囲を制限したい場合は、逆にコライダー内にカメラが入らないようにするCinemachineColliderを検討するのが良いでしょう。
参考:Cinemachine Collider | Cinemachine | 2.8.9
CinemachineConfinerは3Dと2Dの2種類が存在します。本記事では3D用の機能の解説を行います。2D用の使い方は以下記事をご覧ください。
この作品はユニティちゃんライセンス条項の元に提供されています
- Unity2021.1.22f1
- Cinemachine2.7.8
前提条件
予めCinemachineパッケージがインストールされ、バーチャルカメラの設定が済んでいるものとします。
設定方法がわからない方は、以下記事をご覧ください。
使用できるコライダーの種類
カメラの移動範囲の制限用としてCinemachineConfinerに指定できるコライダーは以下の3種類のみです。
- BoxCollider
- SphereCollider
- CapsuleCollider
MeshColliderなど、上記以外のコライダーを指定しても機能が有効にならないためご注意ください。
コライダーの設定
カメラの移動範囲を制限するコライダーを配置します。
例では、Boxコライダーをシーン上に配置するものとします。
差し支えなければ、ColliderのIs Triggerにチェックを入れておきます。これは、予期せぬ物理演算を防ぐためです。
CinemachineConfinerの適用
バーチャルカメラコンポーネントのExtensions > Add Extensionから、CinemachineConfinerを選択します。
すると、CinemachineConfinerコンポーネントが追加されます。
ここにカメラの移動範囲を設定していきます。
Confine Modeには、3D、2Dのどちらのモードかを設定できます。ここでは、3DモードのConfine 3Dを選択することとします。
Bounding Volumeには、移動範囲を制限するコライダーを指定します。例では、先ほど作成したBox Colliderを設定することとします。
Dampingには、カメラが移動範囲を超えたときに、コライダー内に戻る素早さを指定します。デフォルト値の0だと一瞬で戻り、値が大きくなるほどゆっくりと戻るような挙動になります。
実行結果
コライダー内にカメラの移動範囲が制限されていることが確認できました。
さいごに
CinemachineConfinerのExtensionを用いると、バーチャルカメラの移動範囲を指定したコライダー内に制限することができます。
基本的に、Cinemachineのバーチャルカメラ自体は移動範囲を制限する機能を持たないため、バーチャルカメラ側で計算した座標をExtension側で書き換えることで、移動範囲を制限する動作を実現します。
CinemachineConfinerだけでは物足りない場合、独自のExtensionを作って独自の移動制限をさせることも可能です。
Extensionの作り方については、以下記事をご覧ください。