赤兎ラボ

コーディングからバージョン管理、業務効率化までをまとめます。

RenderTextureを使った3Dミニマップ表示

Render Textureとは

カメラを複数台用意して、個々のカメラを別々にゲーム画面上に表示する機能があります。

これはカメラのみでも可能ですが、一旦テクスチャとして撮影して表示することができます。

これをRender Textureと呼びます。

 

使用方法

ProjectビューでCreate > RenderTextureで作成したRender Textureをカメラのtarget Textureに設定する。

これを行うことでカメラのレンダリング先がディスプレイではなくRender Textureに切り替わります。

よって、ディスプレイには表示されなくなります。

 

また、スクリプト上でRenderTextureを作成する場合には手順が必要です。

 

//出力画像の生成
outputRenderTexture = new RenderTexture (outputSize.x, outputSize.y, 0, RenderTextureFormat.ARGB32);
outputRenderTexture.enableRandomWrite = true;
outputRenderTexture.name = "outputRenderTexture";
outputRenderTexture.Create();

基本的には上記のコードでRenderTextureが使用可能になるはずです。これを設定します。

camera.targetTexture = outputRenderTexture;

各種詳細な設定はリファレンスを参照してください。

https://docs.unity3d.com/jp/460/ScriptReference/RenderTexture.html

 

活用例 ミニマップ

Canvasに設置したテクスチャではEvent Systemによって入力わ、受け取ることができます。

ボタンのクリック等を実装した経験があるのでは無いでしょうか。

RenderTextureもテクスチャなので同じことができます。

これによりミニマップが実現できます。

 

サンプル動画では画面右上にドラッグで回転する3Dミニマップを表示しています。

https://www.youtube.com/watch?v=YZyCatMge5I&feature=youtu.be

 

ポイントは

1. ドラッグするとRenderTextureをターゲットとするカメラが回転する仕組み

2. カメラのレンダリング対象がレイヤー別で指定できること(CullingMask)です。

 

ドラッグ操作に関しては以下を参考にしました。

http://negi-lab.blog.jp/DragAndDrop

 

終わりに

 

冒頭でも説明した通り、RenderTextureは撮影した情報をテクスチャとして一旦保存します。

これを元にスクリーンショットを保存したり、イメージエフェクトをかけてリッチなゲーム画面にすることもできます。

これをきっかけに画面上の表現の世界が広がります。

是非、ご活用ください。