概要
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>