もんりぃ is undefined.

育児ネタとか、技術ネタとか。

Unity Case-Study / AssetBundle 化している要素の一部が実機で動作しない

TL; DR

  • Strip Engine Code の作用により、一部の UnityEngine ネームスペース配下のクラスが含まれなくなった。
  • il2cpp を用いたビルドであり、かつ Scene や Prefab を AssetBundle 化している場合に発生する。
  • link.xml 書くのが手っ取り早いかな?

現象

  • ビルドしたアプリで、当たり判定が効かない!という事象が発生。
  • クラッシュすることはないのに、兎に角 BoxCollider2D がウンともスンとも言わない。
  • 実機ログ見てみたら「Could not produce class with ID 61」と出ている。

原因

  • Strip Engine Code という機能により、ビルド対象の Asset や Script から直接参照されていないクラスが除去されたコトが原因でした。
  • BoxCollider2D の他にも、SpriteRenderer とか ParticleRenderer なんかも該当していました。

対応

  • テラシュールブログさんの記事でも言及しているように、スクリプトから参照させたり link.xml 書いたりするのがヨサソウです。
  • 私は link.xml を書く方法で行きました。
    • エラーログに出てくる Class ID を元に Class ID 一覧 からクラス名を割り出し、UnityEngine. から始まる完全修飾クラス名を記載する感じです。

所感

  • この手の「実機でしか起きない」系の問題の原因究明は、「あ、これ○○のサイトで見たことあるなぁ…。」とか「前もハマったことあるぞ!」みたいな経験則に頼りがちなので、どうにかしたいですね…。
  • こうやって、地道に Case-Study を書いて知見を溜めていくのが今のところの最適解なのかな?と思っています。