Unity エディタ拡張内で生成したテクスチャをPNG形式でAssetDatabase内に保存する

はじめに

PLAY Animation Importer for Unity にて、「取り込んだテクスチャファイルの形式が *.asset になっているが、PNG 形式にしてほしい」という要望を頂いたので対応してみました。
ざっとネット検索してもドンピシャな方法を書いているページが見当たらなかったのですが、一応可能みたいですのでここにメモを残しておきます。

コード

Before
// pathTextureInAsset にテクスチャの保存先のファイル名(例: "Assets/textures/fooBarTexture.asset")が入っていると想定
// width, height にそれぞれ縦横サイズ、bytes に画像のバイト列が入っていると想定
var texture = new Texture2D(width, height, TextureFormat.ARGB32, false, false);
texture.LoadRawTextureData(bytes);
texture.Apply(true, true);
AssetDatabase.CreateAsset(texture, pathAsset);
// texture をマテリアルから参照
After
// pathTexturePngInAsset にテクスチャの保存先のPNGファイル名(例: "Assets/textures/fooBarTexture.png")が入っていると想定
// width, height にそれぞれ縦横サイズ、bytes に画像のバイト列が入っていると想定
var texture = new Texture2D(width, height, TextureFormat.ARGB32, false, false);
texture.LoadRawTextureData(bytes);
texture.Apply(true, false); // 第2引数(makeNoLongerReadable) を false にしておかないとEncodeToPNG() に失敗するので注意

// PNG 画像を保存してインポートし直す
File.WriteAllBytes(pathTexturePngInAsset, textureOrg.EncodeToPNG());
AssetDatabase.ImportAsset(pathTexturePngInAsset);
var texturePng = AssetDatabase.LoadAssetAtPath(pathTexturePng, typeof(Texture2D)) as Texture2D;
// texturePng をマテリアルから参照