RenderTextureとは?
RenderTexture
は、Unity
の機能の1つで、カメラの映像をテクスチャとして扱うことができます。これにより、リアルタイムでのリフレクション(反射)表現や、スクリーンショットの取得など、様々な表現が可能になります。
RenderTextureを作成するには?
Project
ビュー上で右クリックし、メニューから
Create
→Render Texture
からRenderTexture
を作ることが出来ます。
作成したRenderTexture
を選択するとインスペクタ上で内容を確認できます。
必要に応じてSize
などを変更しましょう。
カメラと紐付ける
Camera
コンポーネントのTarget Texture
に用意したRenderTexture
を設定します。
これにより、カメラに映る内容がRenderTexture
に直接描画されるようになります。
Target Texture
にRenderTexture
を設定してしまうとGameView
には表示されなくなります。
そのためRenderTexture
に描画する場合は、別のカメラを用意する必要があります。
RenderTextureを表示する
UIに表示する
UI上でRenderTexture
を表示するには、Canvas
にRawImage
を追加し、Texture
にRenderTexture
を設定します。
適当にパーティクルを表示してみると以下の様になります。
カメラに映る内容が左上の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
を利用すると、リアルタイムにシーンの変化を反映したテクスチャを生成することが可能になります。
さらに、ゲーム内の特定のエリアをクローズアップしたり、特定の視点からシーンを表示したりするためにも使用できます。
うまく使いこなすとゲームがちょっとリッチになるかもしれません。