RenderTextureからピクセル情報を取得する方法です。
考え方
前提として、RenderTextureから直接ピクセル情報を取得することはできません。
これに対しTexture2DにはGetPixels()が定義されているのでピクセル情報を取得できます。
よって、まずRenderTextureのピクセル情報をTexture2Dに格納したあとに、
Texture2Dからピクセル情報を取得するというアプローチをとります。
ソースコード
using UnityEngine; public class GetRenderTexturePixels : MonoBehaviour { [SerializeField] private RenderTexture _target; private Color[] GetPixels() { // アクティブなレンダーテクスチャをキャッシュしておく var currentRT = RenderTexture.active; // アクティブなレンダーテクスチャを一時的にTargetに変更する RenderTexture.active = _target; // Texture2D.ReadPixels()によりアクティブなレンダーテクスチャのピクセル情報をテクスチャに格納する var texture = new Texture2D(_target.width, _target.height); texture.ReadPixels(new Rect(0, 0, _target.width, _target.height), 0, 0); texture.Apply(); // ピクセル情報を取得する var colors = texture.GetPixels(); // アクティブなレンダーテクスチャを元に戻す RenderTexture.active = currentRT; return colors; } }
説明はコメントに書いていますが、RenderTexureのピクセル情報をTexture2Dに格納する方法が特殊なので補足しておきます。
まずTexture2DにはReadPixels()という、スクリーンの色情報をこのテクスチャに格納するメソッドがあります。
名前わかりづらい。
Unity - Scripting API: Texture2D.ReadPixels
ここでいうスクリーンとはすなわちレンダーターゲットのことです。
レンダーターゲットをRenderTextureにするには、はRenderTexture.activeを使います。
Unity - Scripting API: RenderTexture.active
すなわち、下記のようにすればTexture2Dにピクセル情報を格納できるということになります。
そのほかはコメント通りです。