うにてぃブログ

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

【Unity】Texture を置き換える

Editor ツールで Texture を新規作成し保存する際には AssetDatabase.CreateAsset を利用する

しかし 既存の asset を置換する際に利用できるいい感じのものが(多分)無い

やろうと思えば FileUtil.ReplaceFile で仮にファイルを作って置換できるけど、仮に作らないといけないのが面倒だし
meta ファイルも書き換わるはずなので、meta ファイルのコピー処理も記述しないといけない

なので System.IO.File.WriteAllBytes を利用する

System.IO.File.WriteAllBytes を利用すると meta ファイルが書き換わらずテクスチャのみを変更することが可能である

利用例

   public static void EditTexture(Texture2D src)
    {
        // パスを取得
        var path = AssetDatabase.GetAssetPath(src);
        // テクスチャをコピーする
        var texture = new Texture2D(src.width, src.height, src.format, src.mipmapCount == -1);

        // Textureの加工
        texture.Apply();

        // パスを指定して Png を書き出し
        System.IO.File.WriteAllBytes(path.Replace('/', System.IO.Path.DirectorySeparatorChar), texture.EncodeToPNG());
        // リフレッシュして Project 反映
        AssetDatabase.Refresh();
    }