前書き
いろいろとUnityEditorの設定やらアセットやらを変更していたらいままで表示されていた敵などが急に表示されなくなった問題が発生しました。解決方法については簡単なのですが、いままで遭遇したことがなかった事象ですのでここに残しておこうかなと思います。
どんな事象起こったのか?
以下がそのときの事象が発生した時と同じような事象の動画になります。左側がScene画面、右側がGame画面になります。Scene画面には敵キャラが表示されますが、Game画面には敵キャラが表示されない(影だけが表示される)状態になっていました。
敵キャラの影が表示されているため、オブジェクトはその場に存在していることが分かります。また、攻撃することで敵を倒すこともできました。このことから、単純に敵キャラ(Enemiesタグ)のオブジェクトがGame画面上に表示されなくなってしまったと考えました。
原因
「敵キャラ(Enemiesタグ)のオブジェクトがGame画面上に表示されなくなってしまった」ことからGame画面にオブジェクトを映す処理(=Camera周り)で何か設定が変わったと思われます。そこでCameraの設定を見てみるとCullingMaskという項目でEnemiesにチェックが入っていないことが分かりました。
CullingMaskとは?
Culling MaskはUnityのカメラでどのレイヤーのオブジェクトを描画するかを指定する設定です。カメラは基本的にシーン内のオブジェクトを描画しますが、Culling Maskを使うことで特定のレイヤーに属するオブジェクトだけを描画するように設定することもできます。
【補足】
今回表示しているCullingMaskの設定についてはTopDownEngineをインポートしてDemoにあるMainCameraオブジェクトの設定をそのまま表示していますので、個々で設定されている場合は表示内容が異なる可能性があります。
CullingMaskの活用方法
Culling Maskを使うことで特定のレイヤーに属するオブジェクトだけを描画することができるため以下のように特定のレイヤーだけを表示したいときに効果的です。
- 背景だけを表示するカメラ:
背景レイヤーだけを描画するカメラを作成し、ゲームオブジェクトやUIなど他のレイヤーは表示しないように設定できます。 - UI専用カメラ:
UIレイヤーだけを描画するカメラを作成し、ゲームの他の要素とは独立してUIを表示できます。
修正後
っと、いうことでCullingMaskのEnemiesにチェックが入ってなかったのでチェックを入れてみました。
チェックを入れたとたんに敵キャラがGame画面上に表示されるようになったので今回の事象の原因はCullingMaskに問題があったようです。
まとめ
今回はGame画面上に表示するオブジェクトを設定する方法について紹介しました。
Camera周りは1度設定してしまうとあまり変更しないところなので、今回の事象を見つけるまでだいぶ時間がかかってしまいました。とはいえ、今回の事象についても簡単に直せるのでもしも同じようなことが起こったらまずはCullingMask周りを見直していきたいと思います。
コメント