概要
Unity A scripted object (probably XXXX?) has a different serialization layout when loading. (Read YY bytes but expected ZZ bytes) Unity Did you #ifdef UNITY_EDITOR a section of your serialized properties in any of your scripts?
Unity プロジェクトを 2022.1.23f1 から 2022.3.16f1 にアップデートして
Android IL2CPP ビルドしたら、一部のプレハブを読み込んだ時に
上記のエラーが発生して特定の MonoBehaviour が動作しない現象に遭遇した
調べてみたところ、以下の条件に該当する MonoBehaviour が動作しなくなっていた
Assets
フォルダではなくPackages
フォルダ内の自作パッケージのフォルダに所属しているAuto Referenced
がオフの .asmdef に所属している- クラスのアクセス修飾子が
internal
やってみたけど効果が無かったこと
AssetDatabase.ForceReserializeAssets
でプレハブをシリアライズし直しEditorUtility.SetDirty
とAssetDatabase.SaveAssetIfDirty
でプレハブを再保存EditPrefabContentsScope
でプレハブを再保存Preserve
属性を MonoBehaviour に付与
効果があったもの
link.xml
を作成して該当の MonoBehaviour が所属する .asmdef が
IL2CPP ビルド時に strip されないようにしたら解決した
Preserve
属性を付与しても解決しなかった原因は不明
link.xml に .asmdef を記述する方法
例えば Kogane.Example.asmdef
であれば以下のように記述する
<linker> <assembly fullname="Kogane.Example" preserve="all"/> </linker>