2016年5月9日月曜日

[Unity]ミニマップ(レーダー)をuGUIとして表示する

RenderTextureを使ってミニマップをuGUIとして表示するおはなし。
少し引っかかったのでメモ。
例は2Dだけど3Dにも適用できるはず。

ミニマップっていうのはコレのこと。

手順

仕組みはすごく単純です。
ミニマップ用のカメラを用意して、カメラでレンダリングされたイメージをテクスチャとして持っておき、RawImageで表示するというだけです。
  1. ミニマップ用のカメラにだけ写るオブジェクトを作る
  2. RenderTextureを用意する
  3. ミニマップ用のカメラを用意し、TargetをRenderTextureに設定する
  4. CanvasにRawImageを追加してTextureをRenderTextureに設定する

ミニマップ用のカメラにだけ写るオブジェクトを作る

ミニマップに表示したいオブジェクトの子要素として新しいGameObjectを作ります。
GameObjectに各種Rendererをアタッチしてカメラに写るようにします。
また、GameObjectのLayerにミニマップ用のレイヤーを追加して設定しておきます。
メインカメラのCullingMaskをからミニマップ用のレイヤーのチェックを外しておきます。

RenderTextureを用意する

プロジェクトビューからAssetsに新しいRenderTextureを追加します。
RenderTextureのサイズは表示したいミニマップの解像度を設定します。(今回の例では表示領域が400x300と決まっているので400x300に設定)

ミニマップ用のカメラを用意し、TargetをRenderTextureに設定する

ミニマップ用のカメラを作ります。
このカメラにはミニマップ用のレイヤーのみが写るようにCullingMaskを設定します。
TargetTextureを作成したRenderTextureに設定しておきます。このカメラでレンダリングした結果がRenderTextureに保持されるようになります。
ちなみに、カメラのアスペクト比はRenderTextureのサイズで決まるようです。

CanvasにRawImageを追加してTextureをRenderTextureに設定する

UIオブジェクトを追加し、RawImageをアタッチします。
RawImageのTextureに作成したRenderImageを設定します。

まとめ

  • ミニマップ用のカメラを用意しレンダリング結果をRenderTextureに描き出す
  • RawImageでRenderTextureを表示する

0 件のコメント:

コメントを投稿