テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】2Dのカメラがステージ外を映さないようにする方法

f:id:tsubaki_t1:20171130231704g:plain

今回は2Dカメラがステージの外を映さないようにする方法についてです。

キャラクターを中心に映すと、ステージの外が映る事がある

ゲーム画面は基本的にカメラが撮影した内容を表示します。その為、カメラがキャラクターを写したい場合にはキャラクターを中心にカメラを動かすことになります。

 

ただしキャラクターを中心に動かした場合、少なくともキャラクターの半径をカバー出来るように背景を作り込む必要が出てきます。
伝統あるブルーバックが表示されるのば場合によっては「クォリティが低い」と思われるかもしれません。

f:id:tsubaki_t1:20171130231831g:plain

その辺りを考えて、以前カメラを制御するモノを作ってみましたが、もっと簡単に出来る方法ができました。

tsubakit1.hateblo.jp

Cinemachineに追加された2D機能

Cinemachine v 2.1より、従来の3D向けカメラ制御に追加して2D向けのカメラ制御機能も追加されました。

f:id:tsubaki_t1:20171130233450j:plain

https://www.assetstore.unity3d.com/jp/#!/content/79898

これを利用すると、上で紹介しているようなカメラが画面外に行かないようにするを割と簡単に実現することができます。

 

この新しいCinemachineの2Dカメラは、被写体の位置調整移動先を予想してカメラを配置する…といった事も可能になりました。今回はカメラの移動範囲を限定する方法に焦点を当てて紹介します。

CinemachineConfinerはカメラが範囲外に移動するのを防ぐ

カメラの移動範囲を限定する方法ですが、CinemachineConfinerを使用します。

f:id:tsubaki_t1:20171130234411j:plain

Add Componentで足す事も出来ますが、ExtensionsのAdd ExtensionからCinemachineConfinerを選択するのが手っ取り早いといえば手っ取り早いです。

移動範囲の定義はColliderの「範囲」を使う

次に移動範囲の設定です。

移動範囲ですがPolygonColliderを使用して定義します。ただColliderと言っても、使用するのは範囲のみらしく、要するにColliderが機能していなくとも動作するという事です。
ただCollider DisableではなくSimulatedをoffにしないといけないという、意味不明な仕様ですが

手順

移動範囲の設定

まず、適当な範囲のPolygon Colliderを作成して、ポリゴンの位置を調整…カメラの移動範囲を設定します。

f:id:tsubaki_t1:20171130235112g:plain

作成したPolygon Colliderには、Rigidbody 2Dを追加、Simulatedのチェックを外します。

f:id:tsubaki_t1:20171201001305j:plain

 

Cinemachine側の設定

次にCinemachineの設定です。

Create 2D CameraでCinemachine用のカメラを作成します。
これで今後はカメラの位置管理や描画範囲の設定(Orthgraphic sizeやNear farの設定)はVirtual Camera側で制御するようなりました。

f:id:tsubaki_t1:20171130233411j:plain

 

追跡する対象を設定します。

Cinemachine Virtual CameraのFollowに、追跡したいキャラクターを設定します。

f:id:tsubaki_t1:20171201000254j:plain

 

後はCinemachineConfinerをVirtual Cameraに追加(ExtensionsのAdd ExtensionからCinemachineConfinerを選択)して、先ほど作成したPolygon Colliderをセットします。

f:id:tsubaki_t1:20171201000454j:plain

 完成

 これで完成です。

f:id:tsubaki_t1:20171201001420g:plain

注意点

色々と試した感じ、幾つか注意すべきことがありそうです。
これは今後のバージョンでどうにかなるかもしれません。

  • 移動範囲よりも大きいカメラのサイズは使えない。
    この辺りはカメラ切替でやるのが良さそう。
  • 角でカメラが「引っかかる」事がある。
    CinemachineConfinerのDampingの値を設定すればある程度緩和出来るが、ソレをするとカメラが画面外に行きやすくなる。
  • TargetGroupとも連動して動作する

感想

単純なカメラの移動範囲限定だけでなく、Cinemachineに統合された事によってカメラの切替やターゲットグループ(複数のターゲットを元にカメラをズームしたりする)が割と簡単に出来るのは良いですね。