Unity Addressable ビルドエラー解決 - Animator が動作しない問題
Unity Addressable ビルドエラー解決 - Animator が動作しない問題
Build シリーズ (3 / 7)
- Unity ビルド自動化 - fastlane
- Unity ビルド自動化 - build pipeline & addressable
- Unity Addressable ビルドエラー解決 - Animator が動作しない問題
- Unity ビルド自動化 - Jenkins
- Unity iOS 〜 Xcode ビルドパイプラインガイド
- Unity iOS - Xcode コード署名ガイド (証明書とプロビジョニングプロファイル)
- Jenkinsビルドパイプライン - プラグインリスト
目次
Unity iOS/AOS + Addressable ビルド時に Animator が動かない問題
主な症状と分析
- Toyverse 開発中に発生したエラー。
- Home Scene では Home Character、World Scene では World Character prefab を使用。
- Home Character の Animator/Animation Clip は正常だが、World Character 側だけ動作しない。
- Addressable Groups の profile は
Default、Play Mode Script はUse Asset DataBase (fastest)。つまり Addressable bundle は patch 取得方式ではなく apk/ipa 同梱状態。
- Character Movement System は FSM State を使用し、Animator Controller パラメータと Animation State ベースで遷移。
最初は FSM ロジック問題かと思った。Idle -> Jump 遷移時に GroundChecker を無視して Jump 継続に見えたため。
しかしデバッグ上はロジック異常なし。検証を進めると、Addressable ビルドで World Character に必要な Animator Controller が抜けている疑いが強くなった。
- 上の画像は Addressable ビルドが正常でない時の状態。
- World Character の Animator Controller を確認すると Addressable チェックが外れていた。チェックして再ビルドしても T-Pose のままだった。
- そこで Animator に割り当てた Avatar の欠落を疑って Model を見ると、
- Model 配下の Avatar も Addressable Group 未登録だった。
解決方法
- Animator component の Animator Controller と Avatar を確認。
- Character model 配下にある Avatar。
- もうひとつ見落としていた点: 以前の Strip Engine Code 記事 -> リンク
- IL2CPP と Strip Engine Code を有効にしていたのに、
link.xmlで Animator 関連クラスを preserve していなかった。
- IL2CPP と Strip Engine Code を有効にしていたのに、
- link.xml コード
1
2
3
4
5
6
<type fullname="UnityEngine.AnimationClip" preserve="all" />
<type fullname="UnityEngine.Avatar" preserve="all" />
<type fullname="UnityEngine.AnimatorController" preserve="all" />
<type fullname="UnityEngine.RuntimeAnimatorController" preserve="all" />
<type fullname="UnityEngine.Animator" preserve="all" />
<type fullname="UnityEngine.AnimatorOverrideController" preserve="all" />
- IL2CPP + Strip Engine Code 有効時は不要クラス除去最適化が走る。上記が除去されるとアニメーション関連が壊れる可能性があるため、
link.xmlでpreserve="all"を必ず指定する。
ロジックが正しいのに挙動がおかしい時は、まず Addressable を疑う。
正直、キャラ prefab を Addressable 登録した時に依存アセットが自動登録されないのは疑問だった。
- Character の Avatar / Animator Controller は Downloadable Assets 配下ではなく、アート管理フォルダ側にあった。
- つまり Addressable フォルダ配下でなくても Addressable Group には登録可能。
- ただし重複アセット/マテリアルが発生しやすいため、Addressable Analyze で重複と依存を確認して最適化する。
修正後、Animator が正常動作
この記事は著者の CC BY 4.0 ライセンスの下で提供されています。






