コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】プロジェクトのアップデート後にすべてのアセットをシリアライズし直す方法

概要

Unity のプロジェクトをアップデートした場合、
基本的にはすべてのアセットは古いバージョンの形式で保存されたままになります

そして、アセットを変更して保存すると、
そのアセットのみが新しいバージョンの形式で保存されます
そのため、Unity プロジェクトをバージョン管理している場合、

f:id:baba_s:20200224205856p:plain

アップデート後にアセットを手動で変更して保存すると
手動で変更した内容とアップデートにより変更された内容が混在されてしまい、
差分の比較が見づらくなってしまいます

もしも、すべてのアセットを新しいバージョンの形式で保存し直したい場合は

using UnityEditor;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        AssetDatabase.ForceReserializeAssets();
    }
}

上記のように AssetDatabase.ForceReserializeAssets 関数を使用します

特定のフォルダ階層以下のアセットのみシリアライズし直したい場合は

using System.Linq;
using UnityEditor;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        var list = AssetDatabase
                .GetAllAssetPaths()
                .Where( c => c.StartsWith( "Assets/@Project/" ) )
            ;

        AssetDatabase.ForceReserializeAssets( list );
    }
}

このようにアセットのパスの一覧を引数で指定します

関連リポジトリ