Edited at

【Unity】RenderTextureからTexture2Dの作り方


今回やること

Cameraで描画されているものをTexture2Dに変換させる。


用意するもの


  • RendererTexture (ProjectWindowで右クリック > Create > RendererTextureで作成可能)

  • Camera


Script


CreateTexture.cs


//このScriptはMainCameraにアタッチしてください

public RenderTexture renderTexture; //mainCameraにつけるRendertexture(アタッチしてね)
public Texture2D kakunin; //ほんとに保存されているかの確認用
Camera mainCamera;
void Start ()
{
mainCamera = GetComponent<Camera>();
kakunin = CreateTexture2D(renderTexture);
}

/// <summary>
/// ここでTextur2Dに変換しているよ
/// </summary>
/// <param name="rt"></param>
/// <returns></returns>
Texture2D CreateTexture2D(RenderTexture rt)
{
//Texture2Dを作成
Texture2D texture2D = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false, false);

//subCameraにRenderTextureを入れる
mainCamera.targetTexture = rt;

//手動でカメラをレンダリングします
mainCamera.Render();

RenderTexture.active = rt;
texture2D.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
texture2D.Apply();

//元に戻す別のカメラを用意してそれをRenderTexter用にすれば下のコードはいらないです。
mainCamera.targetTexture = null;
RenderTexture.active = null;

return texture2D;
}


1c7f98a706f84ae050cab8bb1942589c.png

上のScriptをMainCameraにアタッチしてください。

作ったRendererTextureをアタッチし忘れに注意。


注意!

この処理はそこそこ重いので毎フレームやることは推奨しません。

やるのであれば数フレームに一回や何かのボタンを押したら1度だけ動くようにするのがいいと思います。


おわり

何か質問などがある方はコメントください。