うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Texture をコピーする方法

RenderTexture を利用することで、Texture をコピーすることができます

※ Runtime もしくは UnityEditor上で

private static Texture2D TextureCopy(Texture source, string savePath)
{
    var texture = new Texture2D(source.width, source.height, TextureFormat.RGB24, false);
    var renderTexture = new RenderTexture(texture.width, texture.height, 32);
 
    // もとのテクスチャをRenderTextureにコピー
    Graphics.Blit(source, renderTexture);
    RenderTexture.active = renderTexture;
 
    // RenderTexture.activeの内容をtextureに書き込み
    texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
    RenderTexture.active = null;
 
    // 不要になったので削除
    RenderTexture.DestroyImmediate(renderTexture);
    
    // pngとして保存
    System.IO.File.WriteAllBytes(savePath, texture.EncodeToPNG());
     
    AssetDatabase.Refresh();
 
    // 保存したものをロードしてから返す
    return AssetDatabase.LoadAssetAtPath<Texture2D>(savePath);
}