애니메이션이 끝난 시점에 이벤트를 발생시켜주는 고마운 녀석!
위젯 애니메이션을 재생한 후, 애니메이션 종료 시점에 해당 위젯을 RemoveFromParent 통해 제거하고자 했다.
내가 생각해낼 수 있는 것은 타이머를 써서 애니메이션 종료 후 함수를 호출하는 것이었다.
그러나... 애니메이션이 한 두개도 아니고... 화면마다 조금씩 다르게 만들어버린 바람에...
혹시 없을까 하고 위젯 블루프린트의 이벤트 그래프에서 함수를 살펴보니...!
Play Animation With Finished Event
라는 노드가 있었다!
애니메이션이 종료되면 Finished 이벤트를 발생시켜 연결된 노드를 실행시킬 수 있는 것이다~
물론 코드에서 한 번에 해결할 수 있으면 왔다갔다 안해도 되어서 좋겠지만,,, 블루프린트도 쓰면 쓸수록 간편하다.
특히 이벤트 기반으로 제어하는 게 매우 손쉬워서 좋다.
이렇게 레벨이 종료되는 시점에 검정 화면 페이드 인 애니메이션을 재생하고,
그 애니메이션 종료 시점에 위젯 삭제 후 게임 스테이트에 다음 레벨을 불러오는 함수를 호출할 수 있게 되었다.
타임라인
키 프레임을 설정해 위젯 요소의 다양?한 프로퍼티를 시간에 따라 변경시킬 수 있다.
영상 편집 느낌~
Render Opacity, Transform 등은 당연히 가능한 것이고... 그 밖에도 변경 가능한 값이 많이 있다.
그 중에서도 내가 유용하게 사용한 것...
- 버튼의 Visibility
버튼의 경우 메뉴 Fade In 이 끝난 후에 클릭이 가능하도록 만들고 싶었다.
메뉴 위젯이 생성되면 --> 페이드 인 애니메이션 재생 --> 애니메이션 종료 후 클릭 가능
위에서 말한 노드를 활용할 수도 있겠지만, 귀찮잖아... 다행히 타임라인에서 Visibility 값을 변경 가능하게 되어 있다.
애니메이션 시작 시 Not Hit-Testable (보이지만 클릭 불가) 에서 종료 시점에 Visible 로 바꿔주었다! 간편해!
심지어 이렇게 키프레임으로 변경해놓은 Track 들은 복사 붙여넣기도 가능하다;;;; 미쳤어~!
코드로 친다면... 위젯 가져와서 캐스팅하고 if 체크하고 SetVisibility (ESlateVisibility 어쩌구... 를 몇 개를 쳐야할 뻔~
에디터도 잘 쓰고 코딩도 잘 해야겠다.