Unityのサブカメラを作り、別視点で小窓に表示する

Unityで最初から設置されているMain Cameraとは別の視点のサブカメラを作ってみようと思います。
アクションゲームなどによくあるキャラクターの後ろからの視点と、頭上からの視点を同時に表示してみようと思います。

まずはサブカメラを作ってみます。

新しいカメラを作成する

スポンサーリンク

サブカメラの作成とパラメータの調整

右クリック→Camera

とし、名前を「sub camera」としておきます。

インスペクタからAdd ComponentでFollow Targetを追加し、Targetに「masasi」君をドラッグ&ドロップします。

これで、sub cameraも「masasi」君を追いかけていきます。
Offsetはsub cameraの位置からの差異なのでYの所に5とし上の方に差分を加えます。

サブカメラの表示位置と大きさを調整

サブカメラは上から下を見る視点にしたいので、カメラの角度をX軸を基点に90度回転させます。
次に、サブカメラをメインカメラの右上に小さく表示したいので、Viewport Rectを調整します。

Xはゲーム画面の横の位置の比率(0~1の範囲の比率、0が左)
Yはゲーム画面の縦の位置の比率(0~1の範囲の比率、0が下)
Wはゲーム画面の横の幅に対する比率(0~1の範囲の比率、1が最大幅)
Hはゲーム画面の縦の幅に対する比率(0~1の範囲の比率、1が最大幅)

なので赤丸のように幅と高さを0.3、位置を幅を計算に入れた位置0.7とする。
これで右上にサブカメラの視点が表示されました。
実行してみると視点が違うサブカメラが右上に表示されたと思います。

カメラ追加時の注意点

新しいカメラを追加した時にAudio Listenerがデフォルトでコンポーネントについています。
これは音声を聞く耳の役割を果たすもので、これがないと音声が聞こえません。

が、すでにMain Cameraにも設定されているので、sub cameraのAudio Listenerの左のチェックを外すか、Audio Listenerの右の歯車をクリックしRemove Componentしておきます。
チェックを外さないか、Remove ComponentしていないとConsoleに警告が表示されます。

Cameraのインスペクタで設定できる項目について

Cameraの項目についていくつか見てみます。
Culling Maskはカメラに映るものを指定します。

最初はEverythingですべて見えるようになっていますが、ある物やこのキャラクターは表示したくない、ゲームのステータスは別カメラでのみ表示したい時などはこれを使います。
ここで指定するのはLayer毎なので可視、不可視に指定したいアイテムはLayerを指定しておく必要があります。

Layerはインスペクタ上の名前の右下あたりにあります。
新しいLayerもそこから作成する事が出来ます。

カメラの設定を細かく見る

次にfield of viewですが、訳すと視野?なので見える範囲の事ですかね、調整してもよくわからんです・・・

Clipping Planeは見える範囲なので0.3~1000mの間はカメラで見える範囲ということですね。
Nearの0.3を10とかにすると「masasi」君は範囲外にいるので見えなくなります。

Depthはカメラの深度で、ゲームスクリーンの奥行きを考えた時、Main Cameraはデフォルトで-1なので、一番奥に置かれます。
sub cameraはDepthが0となっているので、Main Cameraの上に重ねた位置にきます。

これで大まかな説明は終了です。
Culling Maskはかなり使えそうなオプションなので、実際に使ってみます。

Cameraの設定項目CullingMaskの効果を試してみる

新しい3DオブジェクトCubeを作ります。

レイヤーのテストの為にサブカメラだけで見えるブロックを作成

上のようにCreate→3D Object→Cube

と選択します。

次にProjectウインドウのAssetsエリアにMaterialsフォルダを作成し、その中にRedという名前のMaterialを作成します(下画面)
Materialは色を設定したり、テクスチャ(模様)を設定したり出来ます。
Materialに色や模様を設定し、そのMaterialをゲームオブジェクトに設定していくという感じになります。

マテリアルの作成

インスペクタの赤四角の部分をクリックし、色を指定します。

マテリアルの色を変更

マテリアルをゲームオブジェクトに設定する

RedのMaterialが出来たらそれをCubeにドラッグ&ドロップします。
するとCubeにRedマテリアルが適用されゲーム画面上のCubeも赤くなります。

それではサブカメラからこの赤いブロックが見えないようにする為、Cubeにレイヤーを設定してみます。
レイヤー名はRedBlockとしておきます。

新しいレイヤーを追加する

上のようにDefaultをクリックし、Add Layerを選択します。

レイヤー名を付けレイヤーを作成

次に、User Layer8の所にRedBlockというレイヤー名を付けます。
自分で名前を付けられるのは8番目のレイヤーからです。

レイヤー名を付け終わったらCubeを選択し、Layerの右側のDefaultをクリックしRedBlockへと変更します。

新しく作ったレイヤーを設定する

サブカメラで見えるレイヤーを設定する

最後にsub cameraを選択しインスペクタ上でCameraコンポーネントのCulling MaskのEverythingをクリックし、RedBlockのレイヤーのチェックを外します。
Culling Maskで指定されていないものはそのカメラからは見えなくなるので、サブカメラではRedBlockレイヤーを指定した赤いブロックは見えなくなるはずです。
MainCameraではEverythingになっているのですべてのゲームオブジェクトが見えるはずです。

これでカメラ毎に可視化、不可視化をする事が出来ます。

それではUnityのプレイボタンを押して確認してみてください。

カメラで見える物をレイヤーで選択してみての感想

カメラによって見えるもの、見えないものを選択出来ると便利ですねぇ~、
このレイヤーというものは、レイヤー毎に当たり判定をするかしないかの区別をする時にも使えます。
それはまたいずれ。

今回はサブカメラについてやりましたが、次回はカメラの切り替えをスクリプトでやってみようと思います。