【Unity】カメラに映るオブジェクトを制限する

f:id:s44511173:20190719151226g:plain 

machokoさんゲームで集めるアイテムを、ゲーム画面の左上に表示(案内アイテム:動画内の赤丸部分)しています。
カメラがmachokoさんに合わせて移動しているにも関わらず、案内アイテムはまるでUIのように、同じ位置に同じ大きさで描画され続けています。
今回はこの手法について、ご紹介します。

案内アイテム用のカメラを作成する

案内アイテムは、あたかもUIのように同じ場所に留まって描画したい。
そんな気持ちにこたえるために、案内アイテム専用のカメラを作っちゃいます。
カメラ作成は、ヒエラルキウィンドウ>メニュー>Cameraで作成できます。

f:id:s44511173:20190719140843p:plain

案内アイテム用のカメラは、machokoさんに追随する必要はありませんので、SmoothFollowはアタッチしません(メインカメラにはアタッチしている)。

また、カメラを新規作成すると、Audio Listenerがくっついてくるんですね。
これはサウンドを出力するいわばラジカセ(古い・・)みたいなもので。
メインカメラにすでについている場合は、削除しちゃいます。
※複数あると、実行時にコンソールにメッセージが出まくってウザいです。

 

レイヤを作成する

さて、カメラが複数できたところで、全てのアイテムを全てのカメラで写す必要はないですよね。
そこで活躍するのが、レイヤの概念です。
レイヤとは「階層」の意味を表しています。Photoshopとかにもありますよね。
Unityのレイヤは、カメラのレンダリング対象選別だけでなく、衝突対象の制限などにも使うことができちゃう、優れものです。

 

f:id:s44511173:20190719135449p:plain

案内アイテムのインスペクタの右上に、Layerのドロップダウンがあります。
この最下段の「Add Layer...」を選択すると、Tags & Layers画面が表示されますので、「UI 3D Layer」を追加します。

f:id:s44511173:20190719135703p:plain

これでレイヤ作成は完了です。

 

レイヤを設定する

f:id:s44511173:20190719135403p:plain

案内アイテムのインスペクタに戻り、Layerドロップダウンから「UI 3D Layer」を選択します。
これで、案内アイテムのレイヤが設定できました。

 

メインカメラのレンダリング対象を設定する

f:id:s44511173:20190719153804p:plain

メインカメラのインスペクタで、Culling Mask項目を開きます。
これはカメラのレンダリング対象のレイヤを設定できる設定項目です。
ここで、先ほどのUI 3D Layerをレンダリング対象外とします。
※上図では、UIレイヤも対象外としています。

案内アイテム用カメラのレンダリング対象を設定する

f:id:s44511173:20190719153935p:plain

案内アイテム用のカメラも同様に、Culling Maskの設定を行います。
レンダリング対象をUI 3D Layerのみとします。
※上図ではUIレイヤも対象としています。 

これらの設定で、同一個所に同一サイズで描画される案内アイテムが実現できました!

 

結論

  • シーン内にカメラを複数設置するこができる
  • カメラのレンダリング対象は、レイヤで選別できる
  • カメラを複数設置することで、いろんな描画ができそう!