【Unity】MainCameraが移動できなくなったときの対処法
今回はMainCamera(もしくは任意のオブジェクト)が動かせなくなったケースの対処方についてです。以前見かけた現象ですが、今回その再現方法を思い出したのでメモしておきます。
カメラが動かせない!
さて、突然カメラが動かなくなりました。カメラのTransformを引っ張っても、Inpsectorでパラメータを変えてもうんともすんとも言いません。
Transformだけではありません。FOVもPhysical Camera設定も、Near Far設定も全て操作不能です。ナンテコッタイ!!!
強いて言えばCameraのenable/disableやClaer Flag、CullingModeやAllow HDR等のAllow系は操作することができます。
zzz... 犯人はCinemachine、貴方です
問題を解決するために推理します。
この手の操作ができない系は、大抵の場合どこからか操作されています。そして操作出来ない項目の一覧に見覚えがあります。
Virtual Cameraです。
ということで動かせないカメラを再度確認してみると、Cinemachine Brain。これがカメラの動きを止めていたみたいです。
Cinemachine、お前だったのか。
Cinemachine BrainはCinemachineを使用すると勝手にMain Cameraにセットされるコンポーネントです。このコンポーネントが最もプライオリティの高いVirtual Cameraに合わせてCameraの座標やFOVを調整します。
これはVirtual Cameraが一つも登録されておらずアクティブなVirtual Cameraが無い場合でも座標を上書きするらしく、コレがセットされていたせいでCameraが動かせませんでした。
本来はVirtual Cameraを追跡するので何となく分かるのですが(Virtual CameraはSceneViewに表示される)今回はVirtual Cameraが無かったのでパっと見わかりませんでした。
どのように起こすのか?
今回の悲劇はどのように起こすことができるのか考えてみます。
まずは自分が起こしたケース。
- Virtual Cameraを作成
- やっぱ止めるとVirtual Cameraを削除
Virtual Cameraを作成した地点でCinemachine BrainをMain Cameraに追加するので、Virtual Camera生成直後に破棄すると動かないMain Cameraが残されます。
もしくは、こんなケースも見かけました。
- Timelineを導入
- Cinemachine Trackをトラックに追加
- 適当なオブジェクトをCineamchine Brainへドラッグ&ドロップし、
Create Cinemachine on ○○を選択
これで動かせないオブジェクトの完成です。今回の場合SphereオブジェクトをTrackに登録したところ、一切動かせなくなりました。正確にはVirtual Cameraを追うようになり、自身で動かせなくなりました。
で、解決方法は?
Cinemachine Brainをカメラから外すだけです。
Cinemachine BrainがセットされているGameObjectはHierarchyに表示されるので、探し出してCinemachine Brainを消せばOKです。
もしくはVirtual Cameraをセットすれば、Virtual Camera経由でCinemachine BrainがセットされているGameObjectを操作出来ます。