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 で保存後すぐにインポートを走らせることで、その後のスクリプトでアセットをひろうことができます。