チャックブログ

UnityやC#などをメインに公開していきます。C++も勉強始めました!

【Unity】RendererTextureからTexture2Dの作り方

今回やること

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

用意するもの

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

Script

     //この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;
    }

上のScriptをMainCameraにアタッチしてください。 作ったRendererTextureをアタッチし忘れに注意。 f:id:tilyakuda:20190419194255p:plain

注意!

この処理はそこそこ重いので毎フレームやることは推奨しません。 やるのであれば数フレームに一回や何かのボタンを押したら1度だけ動くようにするのがいいと思います。

おわり

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