いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity Editor : Texture2D を png 形式で保存してアセットとしてインポートする

Texture2D で動的に生成したテクスチャを png 形式で保存、その後すぐアセットとしてスクリプトで扱いたい場合が結構あるのですが、クラスやメソッドによってパスの扱い方に差があったりして結構めんどうなのでスニペットを置いておきます。

        var path = EditorUtility.SaveFilePanelInProject(title: "Save Texture", defaultName: "test", extension: "png", message: "Save Texture");

        if (!string.IsNullOrEmpty(path))
        {
            var png = texture.EncodeToPNG();
            File.WriteAllBytes(path, png);

            AssetDatabase.ImportAsset(path);

            var asset  = AssetDatabase.LoadAssetAtPath(path, typeof(Texture2D));
        }

まず EditorUtility.SaveFilePanelInProject ですが、SaveFilePanel でなくこっちのメソッドを使うことでプロジェクトからの相対パスが戻り値として取得できます。
SaveFilePanel だとフルパスが返ってきます。

AssetDatabase クラスでは基本的にプロジェクトからの相対パスを使うので、こちらのメソッドのほうが都合がいいです。

File.WriteAllBytesに渡っているのは相対パスですが...まあなんかいい感じに辻褄あわせてくれるんでしょう。たぶん。

AssetDatabase.ImportAsset で保存後すぐにインポートを走らせることで、その後のスクリプトでアセットをひろうことができます。

EditorUtility-SaveFilePanelInProject - Unity スクリプトリファレンス


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。