240222-TIL
2월 22일
오늘은 애니메이션의 알아두면 쓸모있는? 편한?
그런 기능 몇가지를 정리해두고 필요할때마다 꺼내먹어 사용해보자
애니메이션에 이벤트 만들기
애니메이션의 특정 지점 혹은 이 애니메이션이 끝났을때 실행되어야 하는 로직이 있을 것이다.
그럴때 애니메이션 자체에 이벤트를 등록해두고 사용해보자 굉장히 편리할 것이다.

항상 봐오던 애니메이션

0 : 10 초 쯤에 보이는 흰색 부분의 위치 저 라인에 우클릭을 누르면 애니메이션 지점에 이벤트를 등록할 수가 있다
저렇게 이벤트를 달아두고 이벤트 관련 메서드를 만들어주자

발생한 이벤트가 담긴 스크립트를

이렇게 Animator 컴포넌트가 달려있는 오브젝트에 달아주면

아까 애니메이션에 달아두었던 이벤트를 클릭해 Function에 달아둘 메서드에 등록해주면 된다
여기서 주의할점은 Animator 컴포넌트가 달려있는 GameObject에 이벤트 관련 스크립트를 달아줘야
Funtion에 할당할 수 있다는 것이다.

애니메이션이 종료될때마다 이벤트 메서드가 잘 호출되는걸 확인할 수 있다.
AnimatorStateInfo
애니메이션 자체에 이벤트를 등록해서 애니메이션이 끝났을때 발생시킬 메서드를 등록하는 방법도 있지만
AnimatorStateInfo 라는 기능도 있다.


이름부터 딱 와닿게 기능은 현재 애니메이션 그리고 다음 애니메이션 상태에 대한 정보이다.


바로 한번 써먹어보자

걸을때마다 잘 동작하는걸 볼수있다.
자 그렇다면 애니메이션이 시작할때는 잘 알겠는데 애니메이션 중간 혹은 애니메이션이 끝났을때는
어떻게 상태를 체크할수 있을까?

바로 Animator 컴포넌트의 normalizedTime을 이용하는 것이다.
normalizedTime은 애니메이션의 퍼센테이지를 의미하는데 1.0f 라면 애니메이션의 100%
즉 애니메이션이 끝난 것이라고 생각하면 된다 애니메이션의 50% 부분이면 0.5f를 주면 되겠지?
한번 끝났을때를 테스트 해보자

애니메이션의 State이름이 Player_Walk 일때와 NormalizedTime이 1보다 크거나 같을때를 조건으로 걸어주고
두 조건 모두를 만족하면 걷는 애니메이션이 끝이 났다고 보면 된다.

이런 식으로 끝났을때와 시작이 잘 나오는걸 확인해 볼 수 있다.
오늘은 Animation에 이벤트를 등록하는 방법과 AnimatorStateInfo에 대해 알아보았다.
여러모로 잘 써먹을꺼 같은 기능이라 TIL에 정리해보았는데 해당 방법보다 더 좋은 방법이 있다면
더 좋은 방법으로 다시 한번 정리하도록 하고
2월 22일 TIL은 여기서 마치도록 하겠다.