RenderTextureとは?

RenderTextureは、Unityの機能の1つで、カメラの映像をテクスチャとして扱うことができます。これにより、リアルタイムでのリフレクション(反射)表現や、スクリーンショットの取得など、様々な表現が可能になります。

RenderTextureを作成するには?

Projectビュー上で右クリックし、メニューから

CreateRender TextureからRenderTextureを作ることが出来ます。

作成したRenderTextureを選択するとインスペクタ上で内容を確認できます。

必要に応じてSizeなどを変更しましょう。

カメラと紐付ける

CameraコンポーネントのTarget Textureに用意したRenderTextureを設定します。

これにより、カメラに映る内容がRenderTextureに直接描画されるようになります。

Target TextureRenderTextureを設定してしまうとGameViewには表示されなくなります。

そのためRenderTextureに描画する場合は、別のカメラを用意する必要があります。

RenderTextureを表示する

UIに表示する

UI上でRenderTextureを表示するには、CanvasRawImageを追加し、TextureRenderTextureを設定します。

適当にパーティクルを表示してみると以下の様になります。

カメラに映る内容が左上のRawImageに表示されているのが確認できます。

監視カメラに映る映像のように使えそうですね。

マテリアルで表示する

マテリアルを用意してオブジェクトに設定してやれば、

以下の様にモデル上に表示することも出来ます。

スクリプトからRenderTextureを作成する

ここまで、事前に用意したRenderTextureアセットを使っていましたが、

スクリプトから作成することも出来ます。

以下のようなスクリプトを用意し、

描画用カメラと表示先のRawImageを設定しておくと

実行時にRenderTextureを生成して描画できるようになります。

using UnityEngine;
using UnityEngine.UI;

public class RenderCamera : MonoBehaviour
{
    [SerializeField] private Camera _renderCamera;
    [SerializeField] private RawImage _rawImage;

    private RenderTexture _renderTexture;

    private void Awake()
    {
        _renderTexture = new RenderTexture(1980, 1080, 0);

        _renderCamera.targetTexture = _renderTexture;
        _rawImage.texture = _renderTexture;
    }

    private void OnDestroy()
    {
        Destroy(_renderTexture);
    }
}

RenderTextureを使ったアイデア

白と赤のスフィアを用意して、赤だけLayerを変更しました。

以下の動画では、MainCameraにはCullingMaskで白のスフィアだけを描画し、

RenderTexture用のカメラには赤のスフィアも描画しています。

ホラーゲームなどで、直接見えないけど、写真に撮ると見える、といった演出に使えるかもしれません。

まとめ

RenderTextureの基本的な使い方を説明しました。

RenderTextureを利用すると、リアルタイムにシーンの変化を反映したテクスチャを生成することが可能になります。

さらに、ゲーム内の特定のエリアをクローズアップしたり、特定の視点からシーンを表示したりするためにも使用できます。

うまく使いこなすとゲームがちょっとリッチになるかもしれません。