#はじめに
UnityにはAssembly DefinitionというC#のビルドファイルを分割して出力できる機能があります。
詳細は「Unity Assembly Definition 完全に理解した」を参照してください。
Easy SaveはUnityで簡単にセーブ・ロード・暗号化が実装できるアセットです。
さて、現在Assembly Definitionを切りまくっている自分のUnity ProjectでEasy Saveを活用していた所、幾つかハマりポイントを発見したので共有します。
一般的なエラーはKanさんのブログを参照してください
Easy Saveを使ってるうちに遭遇するかもしれない、いくつかのエラーとその対処法【Unity】【アセット】【Easy Save】【トラブルシューティング】
Easy SaveにAssembly Definitionを追加する
Easy Saveは標準ではAssembly Definitionを追加していないため、Assembly Definitionを切っているアセンブリ内でEasy Saveの機能を追加するには、自分でAssembly Definitionを追加しなければなりません。
それでは、Assets/Plugins/EasySave3/Scripts
内にES3
という名称でAssembly Definitionファイルを作成します。Assets/Plugins/EasySave3/Editor
内にはES3.Editor
という名称でAssembly Definitionファイルを作成し、Assembly Definition ReferencesにES3.asmdefを追加しましょう。
しかしこのままだと、どんな型の値を保存しようとしても
ES3Type for primitive could not be found, but the type list has been initialised and is not empty. Please contact Easy Save developers on mail@moodkie.com
というエラーが出てしまいます。
このエラーを解決するには、Assets/Plugins/EasySave3/Resources/ES3/ES3Defaults.asset
を選択し、Assembly Namesに今回追加したAssembly Definitionファイルの名前(今回はES3)を追加しないといけません。
保存済みの型のnamespaceかAssembly Definitionファイルを改名する
Easy Saveでは値のセーブ時に、stringのkeyだけでなくnamespaceとアセンブリ名も使用しています。
そのため、既にセーブしてあるクラスや構造体のnamespaceやアセンブリ名(Assembly Definitionファイル名)を変えた場合、keyは一致するがnamespaceかAssembly Definitionファイルが異なるため
System.InvalidOperationException: Trying to load data of type 保存対象の型, but data contained in file is type of
というエラーが発生して、読み込み処理ができなくなります。
この場合はes3ファイルを直接書き換えるか、作り直す必要があります。