Unity　Cinemachineでカメラ制御する

CinemachineとはUnity公式のカメラ制御システム。画面の揺れとか、カメラの動きを設定できる。

2dゲームにおいては特定のキャラクタにズーム、画面の揺れ、チュートリアル的なムービー、ピクチャインピクチャを使い二つの画面を１画面に映すなどが考えられる。
キャラクタにだけ焦点をあてるならProCamera2Dという有料アセットがあるのでそれを使用したほうがよさそう。

## Virtual Cameraとは
Cinemachineでは複数のVirtualCameraを作成し、それを切り替えることでカメラの切り替えを実現している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/660d843f-cbcb-6386-f8ed-37751128c395.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/7977823a-151b-45d0-b5c2-1aa69d4cfccd.png)

どのVirtualCameraを使用するか切り替えているのがCinemachineBrainと呼ばれるもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/ee344087-9f41-0eca-3738-fe0d285cd8e9.png)

これがカメラ設定の中心になる。

## カメラを切り替えてみる
新しくGameObjectを作成し、Component＞Cinemachine＞CinemachineVirtualCameraを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/06ea45e4-4db4-6155-93ae-6775deacc624.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/56377513-4215-707e-3231-80dd52d89ba3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/f4d6da8f-1164-8380-a668-913f3e14f0ba.png)

再生中に使用している方の　VirtualCameraを非アクティブにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/83c87c19-29a6-231e-48b1-50a84e7550d7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/b0effcb6-6209-548c-e5a0-39caf3e989ee.png)
するとカメラ切り替わる。

別の方法ではPriorityを変更する。数が多いものほど優先してカメラが切り替わる。この値とスクリプトで制御することもできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/db8c422c-a096-3c61-d52e-b29f92e87a54.png)

## カメラ切り替わり方を変更する
パッと切り替えたり、じわっと切り替えたの設定はCinemachineBrainのDefault Blendで設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/0c1f0368-6088-09e5-9bf7-cbf428de4a33.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/ef8e0e1e-c856-7112-5b17-158328f2f2e2.png)

パッと切り替えたい時は0にしたり、Customで好きなEaseで切り替えることもできる。

## 複雑な制御をしかっこいいカメラの動かし方をする。
複雑な制御をするにあたってTimeLineを使う。TimeLineは２秒間はこのカメラ、その後３秒間は次のカメラ、のようのな制御をすることができる。
Projectで右クリック> Create > Timeline
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/c1f7dc06-1204-7402-33b8-4ad815446525.png)
適当なオブジェクトにPlayableDirectorを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/41fb9e51-7e6a-e7bc-1009-a33372f8ea8b.png)
作成したTimeLineを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/068d5c9a-e925-e27a-c7e5-f664d007501e.png)

Window > Sequencing　> Timelineを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/05b91226-a167-5f09-0009-8e187a5447cb.png)

プラスマークからCinemachine Trackを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/cb9f7538-aced-5773-ed29-08a59e223a43.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/d83e05eb-336c-e02c-7bac-25edc0bbc7d8.png)
VirtualCameraのゲームオブジェクトをTimeLine上にD＆Dすると追加できる。カメラを２個と追加した。

シークの橋をかぶせるように移動させるとブレンド具合が変化する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/d3c877fe-6f93-edb7-b96d-d618032fa0dd.png)

再生するとカメラが切り替わるのがわかる。これを応用すれば好きなにカメラを置いて、好きなタイミングで切り替えることができる。

## カメラを複数同時に１画面に表示する。
Cinemachineでは複数のカメラを切り替えるというのが基本的な制御方法になっているため同時に表示するには別の方法が必要。

新しいカメラを追加する。
Hierarchy右クリック＞Cameraを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/355872b0-fbce-f7a1-c01f-e3f3bcd18133.png)
画面上のどの位置にカメラを表示するかの設定はViewporRactで設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/4ba71e21-ef6d-1010-d4d8-f2da7d0808e5.png)

再生で確認してみると左上に全体小さくした部分が出来ている。これで複数の画面を同時に表示できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/16a3706e-21b3-0545-ad38-986ce1f44b6e.png)


## Tips
### Camera設定が動かない
CameraのSizeや設定はVirtualCameraの設定に紐づけされているため設定値を変えるときはVirturalCamera側を変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/da90719d-05a5-9239-633c-cd3ae9a96344.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/4aa34e99-dccf-b0d5-c8f2-4813b6cad35a.png)

### カメラになにも映らない。
２Dだとよくありがち、カメラがどこからどこまでを映しているのかを確認する。一度３Dにするとわかりやすい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/3393eff9-e293-fb7f-a67e-c7b87fbdfbc6.png)
ここらへんや
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/fed84bf1-e3c9-8a4d-d99c-868df55b3800.png)
ポジションの位置（z軸など）を変更して調整する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/f4bf2320-8265-a512-e90c-6a210fb456b0.png)



## 参考サイト

https://unity.com/ja/unity/features/editor/art-and-design/cinemachine

https://forpro.unity3d.jp/unity_pro_tips/2022/09/14/3923/

https://unitymaster2.com/unity-cinemachine/

https://light11.hatenadiary.com/entry/2018/09/18/235615

https://docs.unity3d.com/ja/Packages/com.unity.cinemachine@2.6/manual/CinemachineMultipleCameras.html