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が最大幅)

なので赤丸のように幅(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になってますが、気にしないでください・・・(^_^;)

終わりに

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

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

タイトルとURLをコピーしました