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が最大幅)
なので赤丸のように幅(W)と高さ(H)を0.3、位置(XとY)を幅を計算に入れた位置0.7とします。
これで右上にサブカメラの視点が表示されました。
実行してみると視点が違うサブカメラが右上に表示され、キャラクターの移動と共にsub cameraが移動したと思います。
カメラ追加時の注意点
新しいカメラを追加した時にAudio Listenerがデフォルトでコンポーネントについています。
これは音声を聞く耳の役割を果たすもので、これがないと音声が聞こえません。
が、すでにMain Cameraにも設定されているので、sub cameraのAudio Listenerの左のチェックを外すか、Audio Listenerの右の歯車をクリックしRemove Componentしておきます。
チェックを外さないか、Remove ComponentしていないとConsoleに警告が表示されます。
Cameraのインスペクタで設定できる項目について
Cameraの項目についていくつか見ていきます。
Culling Maskはカメラに映るものを指定します。
最初はEverythingですべて見えるようになっていますが、ある物やこのキャラクターは表示したくない、ゲームのステータスは別カメラでのみ表示したい時などはこれを使います。
ここで指定するのはLayer毎なので可視、不可視に指定したいアイテムはLayerを指定しておく必要があります。
Layerはインスペクタ上の名前の右下あたりにあります。
新しいLayerもそこから作成する事が出来ます。
下の画像ではsub cameraのLayerがDefaultに設定されていることがわかります。
次に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のプレイボタンを押して確認してみてください。
↑のようにメインカメラでは赤いCubeは見えますが、サブカメラでは赤いCubeが見えなくなっています。
キャラクターがEthanになってますが、気にしないでください・・・(^_^;)
終わりに
カメラによって見えるもの、見えないものを選択出来ると便利ですねぇ~、
このレイヤーというものは、レイヤー毎に当たり判定をするかしないかの区別をする時にも使えます。
今回はサブカメラについてやりましたが、次回はカメラの切り替えをスクリプトでやってみようと思います。