Unity ECS の Android ビルドでエラー
始めに
前記事Unity ECS で、Prefab を使用した場合に Android ビルドでエラー以外のビルドエラー解消方法について書く。
- Unity 2022.3.29f1
- com.unity.entities 1.0.16
- com.unity.brust 1.8.13
対処方法
次のようなエラーが出た場合を例に、問題個所を探す方法を書く。
Building Library\Bee\artifacts\Android\d8kzr\a36g5xb4s3en.o failed with output:
C:\MyProject\Library\Bee\artifacts\Android\il2cppOutput\cpp\Assembly-CSharp.cpp(11680,147): error: no member named '_____Unity_Transforms_Parent_RO_ComponentTypeHandle' in 'InternalCompiler_tAD1212FBD6EC9B7A9BD225C9AD3F1591C4741F98'
ComponentTypeHandle_1_t81CA9224B4C37FC5E6A7C357B5072AFB242809A3* L_1 = (ComponentTypeHandle_1_t81CA9224B4C37FC5E6A7C357B5072AFB242809A3*)(&L_0->_____Unity_Transforms_Parent_RO_ComponentTypeHandle);
- エラーにあるファイルを Visual Studio などで開く。前述のエラーだと以下になる。
- C:\MyProject\Library\Bee\artifacts\Android\il2cppOutput\cpp\Assembly-CSharp.cpp
- エラー行に移動。同じく11680行
- エラーが出ている型名で検索する。同じく ComponentTypeHandle_1_t81CA9224B4C37FC5E6A7C357B5072AFB242809A3
- 複数箇所あるので検索を続けると自分のクラス名にたどり着く事がある。そのクラスを見直す。
実際の修正は実装方法によると思われる。例として自分が行った修正を挙げる。
- ローカル関数を止めて普通の関数にした。(前述のエラー)
- エラーに Unity_Entities_Entity_TypeHandle が無いとあったので、 IJobEntity の Execute 関数に in Entity entity 引数を追加した。
- 一つのファイル内に ISystem と IJobEntity を書いていたが、別ファイルに分けた。
最後に
Android で ECS を使う事に不安になってきていたが、もう少し頑張れそうだ。