프로그래밍 공부
작성일
2024. 1. 23. 14:30
작성자
WDmil
728x90

언리얼에서 AnimNotify를 따로 생성해서, ABP의 스테이트머신을 통해 호출하고, 애니메이션을 바꾸어보자.

 

언리얼의 AnimNotify는 Animation의 실행중 클립을 호출해주는 기능이다.

생성은 다음과 같이 정의한다.

AnimNotify로 블루프린트를 생성한다.


AnimNotify

AnimNotify에서는 위와같은 항목들을 확인할 수 있는데, 각각 GetNotify Name과 Receved_Notify이다.

GetNotifyName은 에니메이션 그래프에서 설정할 Notify의 이름을 정의하는것 이고,

Received Notify는 정의된 Notify를 실행하였을 때 작동할 동작사항을 이야기 한다.

 

우리는 AnimNotify를 실행해서 객체의 애니메이션을 실행시킬것 이다.

 

Name에서 위와같이 정의 해주면, ABP에서 확인해서 호출할 수 있다.

블루프린트의 이름으로 newBlueprint가 정의된것을 볼 수 있다. 이름을 바꾸면 바뀌어 보인다.

그리고, Received에 위와같이 정의해주면 된다.

 

Notify의 Mesh값에서 소유자를 가져온다음, 소유자를 Bp_Player로 형변환 하고, 형변환 한 객체에서 이벤트를 실행시키면 된다.

 

즉, 함수포인터로 객체를 실행하는것 과 같이 동작한다.


애니메이션 클립 적용

ABP로 가보자, ABP의 실행단위중, bool변수나 애니메이션의 실행중의 노티파이 호출로 BP_Player의 상태를 변환시켜주어야 한다는걸 알 수 있다.

 

일단, 칼을 집어넣는 동작과 칼을 빼내는 동작의 과정, 그리고 완료 여부를 Bp_Player에서 알아야 움직임 또는 뷰의 회전방식을 정의할 수 있다.

 

일단 BP_Player에서 위와같이 Bool변수를 정의하고, Bool변수를 다루는 커스텀 이벤트를 연결시켜준다.

그렇게 되면, Bool변수를 커스텀 이벤트를 통해 다루게 된다.

 

우리는 이 Bool변수들을 ABP에서 받아와서 사용해야 한다.

 

틱 딜레이마다 Bool변수의 타입변환을 받아와서 사용하게 바꾸어주자.

 

이렇게 Bool변수를 연동시켜주면 된다.

 

해당 객체의 Bool변수를 가져와서 ABP의 같은 이름의 Bool변수를 가져오고, Bool변수를 바꾸어주면 된다.

Bool변수를 연결하였으면, 이제 칼을 든다는 키를 누를때 마다, 같은 커스텀 이벤트가 실행되는것 이 아닌 현재 타입에 대해, 칼을 들고 있는지 여부를 판별하여 칼을 장착, 해제하면 된다.

 

Sward입력 액션을 위와같이 바꾸어준다. 칼을 들고있다면, 내리게, 칼을 들고있지 않다면 칼을 들게 변환해준다.

 

그리고, 각 객체에 대해 Sheating의 함수여부에 따라 변환을 시켜준다.

나머지 Sheath는 개인적으로 만들어본것 과 같은 방식으로 정의된다.

애니메이션 전환정도에 따라 노티파이를 따로 정의했냐 여부만 다르게 되는것.


테스트

 

728x90