Animator에서 사용하는 Parameter를 조작할 목적으로 StateMachineBehaviour를 써보게 됐다. StateMachineBehaviour는 네 가지 쓸만한 Callback (OnStateEnter, OnStateMove, OnStateUpdate, OnStateExit)을 가지고 있는데 정확히 어느 타이밍에 실행되는지는 매뉴얼에 나오지 않았다. MonoBehaviour와 비슷한 이름을 가진 Callback이지만 실제로는 ScriptableObject를 상속받기 때문에 테스트하지 않고서는 언제 동작할 지 알 수 없었다.
Callback 순서 테스트 결과
- MonoBehaviour – Update
- State 입장
- Animation 첫 프레임 동작
- OnStateEnter
- OnStateMove
- MonoBehaviour – LateUpdate
- MonoBehaviour – Update
- Animation x 프레임 동작
- OnStateUpdate
- OnStateMove
- MonoBehaviour – LateUpdate
- 7~11 반복
- MonoBehaviour – Update
- OnStateExit
- OnStateMove
- MonoBehaviour – LateUpdate
StateMachineBehaviour의 모든 콜백은 애니메이션 업데이트가 끝난 뒤에 이루어지고 있었다. 결국 OnStateUpdate로 Parameter를 조작하여 애니메이션에 영향을 주려던 내 계획은 수포로 돌아갔다. 유니티에서 OnStatePreUpdate 같은거 하나 만들어주면 참 좋겠다. 물론 안해주겠지.