コガネブログ

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

【Unity】ScriptableObject に後から PreferBinarySerialization 属性を付与した時にシリアライズし直すエディタ拡張

ソースコード

using System.Linq;
using UnityEditor;
using UnityEngine;

public class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        var paths = AssetDatabase
                .FindAssets( $"t:{nameof( ScriptableObject )}" )
                .Select( x => AssetDatabase.GUIDToAssetPath( x ) )
            ;

        AssetDatabase.ForceReserializeAssets( paths );
    }
}
  • ScriptableObject に後から PreferBinarySerialization 属性を付与した場合、
    既に作成済みの ScriptableObject はテキスト形式で保存されたままになる
  • AssetDatabase.ForceReserializeAssets 関数を使用することで
    バイナリ形式にシリアライズし直すことができる