topaz-dev’s

ああああああ

Unity Texture2Dをpng画像を保存する

UnityEngine.Texture2Dのテクスチャをpngとして保存する方法。

実装
private void CreatePng()
{
    // new Texture2D( Width , Height ); でサイズを指定
    Texture2D tex = new Texture2D(32, 32);
    byte[] png = tex.EncodeToPNG();
    // バイト配列として書き込む
    File.WriteAllBytes(Application.dataPath + "/SavedData/Screen.png", png);
}
Application.datapathとは

実行環境によって値が異なります。エディタで実行した時とWebGLMacなどビルドした時にはパスが変わって来ます。
エディタで実行した時には、<path to project folder>/Assetsとなります。普段Unityエディタのプロジェクトウィンドウで見えるAssetsまでのパスとなります。
そこからの相対パスを追加して任意の場所へ保存することができます。

画像の生成

実際に画像を生成して見ます。32*32の画像でx座標に応じたグレイスケールのテクスチャを作りpngとして保存します。

private void CreateTexture()
{
    Texture2D tex = new Texture2D(32, 32);
    for (int i = 0; i < tex.width; i++)
    {
        for (int j = 0; j < tex.height; j++)
        {
            float val = i / (tex.width * 1.0f);
            tex.SetPixel(i, j, new Color(val, val, val));
        }
    }
    byte[] png = tex.EncodeToPNG();
    File.WriteAllBytes(Application.dataPath + "/Saved/Screen.png", png);
}

生成された画像