위의 노드는 타겟 스켈레탈 메시에서 애니메이션 시퀀스를 실행해주는 블루프린트 노드이다.
C++에서도 SkeletaMesh에서 아마 PlayAnimation()이라는 함수를 통해서 실행할 수 있을것이고..
아무튼 새벽 1시에 이 글을 쓰는 이유는 이 노드와 함수에 적힌 설명은 아래와 같았는데
*애니메이션 인스턴스의 상태를 변경합니다. 인스턴스의 상태는 트랜션트 데이터로, 이 컴포넌트와 함께 시리얼라이즈도지 않습니다.
라고 적혀있다.
애니메이션 인스턴스의 상태를 변경한다? 이 무슨.. 나는 C++에서 작업을 하고있었고 몽타주가 아닌 애니메이션 시퀀스를 실행할 필요가 있는 기능을 구현하고 있던 중이였다. 그런데 문제가 생겨버렸는데 시퀀스가 실행된 이후에 애니메이션 블루프린트에서 구현해두었던 Idle 상태로 돌아가지않는 문제가 생겼던 것이다.
이게 왜 발생하는거지? 하고 구글링도 해보고.. 진짜 서너시간 삽질은 한거같다. 그러던 도중 애니메이션 인스턴스의 상태가 대체뭔데? 라고 생각해보다가 스쳐지나가듯이 떠오른게 애니메이션 모드였다.
혹시 애니메이션 인스턴스의 상태라는게 이걸 말하는게 아닐까.. 그래서 간단하게 테스트 기능을 BP상으로 빠르게 구현을 일단 해보았고
대충 이렇게 구성되어있는데, 애니메이션을 실행한 다음 print string으로 현재 애니메이션 모드를 확인하고 2초후에 애니메이션 모드를 다시 블루프린트로 바꿔주는 로직이다.
결과는?
하.. 진짜 예상대로였다. 애니메이션 인스턴스의 상태가 바뀐다는게 스켈레탈 메시의 애니메이션 모드가 바뀐다는것을 의미하는 것이였을줄 어떻게 알았겠냐고.. 모드가 애니메이션 블루프린트 모드로 바뀌어버리니 당연히 애니메이션 제어는 BP가 아니라 애셋을 통해서 제어될수밖에 없었고
따라서 모드를 바꿔주지않으면 애니메이션 BP에서 정의된 스테이트를 사용할 수가 없었던 것이다.
진짜 너무 억울해 아