주녘공부일지

[Unity] StateMachineBehaviour 본문

GameEngine/UnityEngine - Class

[Unity] StateMachineBehaviour

주녘 2022. 3. 23. 17:51
728x90

StateMachineBehaviour란?

AnimatorController의 컴포넌트로 붙일 수 있는 StateMachineBehaviour 스크립트

- Animator 상태 머신의 상태 변화에 따라 CallBack 함수를 실행해주는 방식

 

AnimatorClip Move의 컴포넌트 class MoveAnim

 

public class MoveAnim : StateMachineBehaviour 

using UnityEngine;

public class MoveAnim : StateMachineBehaviour
{
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // 애니메이션 실행 시 첫 프레임에 한번 호출
    }

    public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // 처음과 마지막 프레임을 제외한 각 프레임 단위로 호출
    }

    public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // 해당 애니메이션 스테이트를 나가기 직전 (마지막 프레임)에 한번 호출
    }

    public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // MonoBehaviour.OnAnimatorMove 직후에 실행
    }

    public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // MonoBehaviour.OnAnimatorIK 직후에 실행
    }
}

실행 순서 : OnStateEnter -> OnStateUpdate,Move -> OnStateMove -> OnStateExit

 

MonoBehaviour.OnAnimatorMove

- Update 프레임마다 Animator 정보가 갱신될 시에 호출되는 이벤트 함수

 

MonoBehaviour.OnStateIK

- Update 프레임마다 IK 정보가 갱신될 시에 호출되는 이벤트 함수

 

+ 위 두 이벤트 함수는 애니메이터가 붙어있는 오브젝트만 호출 가능

 

 

MonoBehaviour를 상속받은 스크립트에서 접근하는 방법 간단 예제

private Animator _animator;
private StateMachineExample _stateMachineExample;

void Start()
{
    _animator = GetComponent<Animator>();
    _stateMachineExample = _animator.GetBehaviour<StateMachineExample>();
}
728x90

'GameEngine > UnityEngine - Class' 카테고리의 다른 글

[Unity] MonoBehaviour Life Cycle (생명주기)  (0) 2023.09.05
[Unity] Animation Blending  (0) 2022.03.23
[Unity3D] Camera  (0) 2022.03.01
[Unity3D] Physics.Raycast (+LayerMask)  (0) 2022.02.24
[Unity3D] Collision (충돌)  (0) 2022.02.23