前書き
TopDown Engineを触っているとときたま、予期せぬことが起きることがあります。だいたいは自分の修正方法に問題があるせいでトラブルになるのですが、今後のことも考えてこういったトラブルが発生した時は解決方法も合わせて残していこうかなと思います。
どんな事象?
以下の動画のように実行する前の状態だとMainCameraは正しくステージを映しているのですが、実行してみると真っ暗の状態になります。(カメラは微移動しているため何かしらの領域が外れるとステージがちらっと見える)
このことから何かしらのカメラの設定をいじったことによって発生したと推測できます。
そもそもTopDown Engineはどのようにカメラを動かしているのか?
TopDown Engineでは以下のようにcinemachineを使ってカメラの制御をするのがデフォルトとなっています。
そしてcinemachineを使うときにカメラの領域を設定するCinemachine Confinerというスクリプトがあります。(おそらくTopDown EngineのSceneを見てみるとデフォルトで設定されていると思います)
Cinemachine ConfinerについてはCM vcam1のオブジェクトに設定されているので中身を確認していきましょう。
Cinemachine Confinerでの画面領域設定について
Cinemachine Confinerを見てみるとLevelManagerのBoxColliderを取得していることが分かります。
LevelManagerで設定されている領域がカメラが動ける領域になります。以下の例で行くと緑色の長方形の領域がカメラが移動できる範囲になっています。
またその時の設定では(X,Y,Z)=(200,150,0)でカメラが動ける領域を設定していることが分かります。
カメラが真っ暗になる原因
ここまでがカメラを動かすための前提条件の説明になります。では、今回なぜ実行前はちゃんと見えていたものが実行すると見えなくなるかの原因について説明していこうと思います。
簡単に言うとカメラの映す領域が近すぎてステージがカメラの目の前に来てしまうことが原因になります。BoxColliderパラメータとしては以下のBoxColliderのZ軸のSizeが”0″になっていることが原因になります。
どういうことかというと実際にZの値を変化させたときの図が以下になります。
BoxColliderのSizeZを”0″にした場合
分かりづらいですがステージのSpriteRendererのギリギリ上にカメラがいる形になっています。この状態だとステージにカメラがくっついている形になるため、真っ黒な画面がMainCameraに表示されてしまいます。
BoxColliderのSizeZを”45″にした場合
ステージから”45″離れた位置にカメラが設定されていることが分かります。この状態であれば余裕をもってステージを表示することができるため、ただしくMainCameraで表示されることが分かります。
まとめ
今回は実行するとカメラが真っ暗になる原因について紹介しました。
2Dでゲームを作成しているため、なんとなくLevelManagerのBoxColliderのSizeZを”0″にしてもいいだろうと(当時やったことを)思い出していますが、カメラの挙動については3Dで動かす必要があることを失念していました。カメラを揺らしたり動かしたりするためには2Dではなく3Dに設定する必要があるため、ほかにもカメラの挙動がおかしいなと感じたらカメラの設定がちゃんと3Dのパラメータになっているのか確認してみるのがいいかもしれません。
コメント