はじめに
今回はRenderTexture
を使ってカメラに映る映像をテクスチャに反映させてみたいと思います。
1. RenderTextureアセットを作成
まずはProjectビュー
にてCreate -> RenderTexture
を選択し,RenderTexture
アセットを作成します。
2. テクスチャにレンダリングするカメラを用意
Hierachyビュー
にてCameraゲームオブジェクト
を生成し,Cameraコンポーネント
のTargetTexture
に先ほど生成したRenderTexture
アセットを設定します。
こうすることでTargetTexture
を設定したCameraコンポーネント
は画面(Game
ビュー)に直接レンダリングされるのではなく、Texture
にレンダリングされるようになります。
3. RenderTexureを描画するUIを作成
RenderTexture
を描画するRawImage
を作成します。UI -> RawImage
を選択。
あとはRawImageコンポーネント
のTexture
に最初に作成したRenderTexture
アセットを設定すればOKです。
4. 使い終わったとき
これを知らない方がめちゃくちゃ多いですが、使い終わったあとにRenderTexture.Release
を呼んでください。
これは公式ドキュメントにも書いてあることですが、明示的に開放をしないと正しくガベージコレクションが働かないらしいです。
UnityEngine.RenderTexture - Unity スクリプトリファレンス
using UnityEngine; public class RenderTextureTest : MonoBehaviour { [SerializeField] private RenderTexture _tex; void Update() { if (Input.GetKeyDown(KeyCode.R)) { Debug.Log("Release"); _tex.Release(); } } }
RenderTexture
自体はピクセルに描画を始めたときにメモリが確保され,RenderTexture.Release()
が呼ばれたときに開放されるようです。(一応Destory(object obj)
でもいけるみたい)
RenderTextureのメモリを解放するのはReleaseが良いの?Destroyが良いの? - 渋谷ほととぎす通信
また開放したといってもテクスチャ自体は破壊されず、使用時に自動的に再作成されます。
結構忘れがちですのでご注意ください。