以前、下のリンクで紹介した「AnimatorのGameObjectを非アクティブにするとステートマシン(その他諸々)が破棄される」問題の、対処法です。
Animator.keepAnimatorControllerStateOnDisable
新しい解決方法は簡単で、animator.keepAnimatorControllerStateOnDisable = true;
を呼び出すだけです。これでオブジェクトが非アクティブになった時でもステートマシンがリセットされません。
https://docs.unity3d.com/ja/2018.3/ScriptReference/Animator-keepAnimatorControllerStateOnDisable.htmldocs.unity3d.com
keepAnimatorControllerStateOnDisableはシリアライズが可能
ここで驚くべきというか面白いというかユニークなのは、Animator.keepAnimatorControllerStateOnDisableという設定、実はシリアライズが可能という事です。
エディター拡張等でAnimatorを持つPrefab郡に対して片っ端からanimator.keepAnimatorControllerStateOnDisable = true;
を実行してやれば、初期化コード等が無くとも非アクティブ時のステートマシン破棄を防ぐ事が出来ます。
なおInspectorをDebugにすると、Inspector側からでも設定が可能です。
何故か言語設定を「日本語」にしてると、Inspectorで表示される項目名が全く違う名前(アニメーターコントローラーレイヤー)になってるので、そこんとこ注意です。
追記: WriteDefaultは相変わらずリセットされる(正確にはアクティブ時に書き込まれてしまう)ので、GameObjectのアクティブ切替はまだ注意が必要です。