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は撮影した情報をテクスチャとして一旦保存します。
これを元にスクリーンショットを保存したり、イメージエフェクトをかけてリッチなゲーム画面にすることもできます。
これをきっかけに画面上の表現の世界が広がります。
是非、ご活用ください。