Unreal Engine/게임클래스 - 언리얼엔진 기초

[18강] Anim Notify

whereareyoung 2023. 10. 6. 13:58

Anim Notify

애니메이션이 플레이 되다가 특정 구역을 지나가면 호출해주는 것 

       * 예시 : 

           1. 임포트한 애니메이션 > 애니메이션바를 움직이며 원하는 프레임에 "Play Particle Effect" 노티파이추가

            2. 임포트한 파티클 효과 "Fire_Exp_03" 설정 

            3. 플레이를 했을 경우 설정한 프레임에 "Fire_Exp_03"  파티클이 호출됨.

 

Anim Notify 심는 방법

1. 일반 문자열로 처리하는 방식

일반 강의에서 많이 다루며 애니메이션 블루프린트에서 플레이어에게 넘겨주는 방식인데 번거로움 

유지보수가 어려움

노티파이추가 > 새노티파이 

2. 객체로 만들어서 처리하는 방식 

노티파이 객체를 이용하는 방법으로, 유지보수가 더 간편함 

노티파이추가 > 새노티파이 하단에 있는 버튼으로 추가 

 

Notify 를 생성해 사용하는 방식(2.) 으로 진행

1. 새폴더 > " Notifies " 생성 

 

2. Notifies 폴더 > 블루프린트 클래스 > AnimNotify " AN_Equipped " 생성 

* AN: Anim Notify 

 

3. 생성한 블루프린트를 열어 함수 오버라이드

--1) Get Nofity Name : Equipped 를 반환노드로 설정하고 컴파일 

 

--2) 장착과 해제에 사용할 커스텀 이벤트 생성

무기 장착과 해제에 총 네 개가 필요 

 

--3) Received Notify : 

[1] " Mesh Comp " 는 AnimNotify 를 넣을 애니메이션을 플레이하고 있는 메시 컴포넌트의 메시를 가져옴.  

[2] " Get Owner " - 하면 BP_Player Actor가 가 return 이됨 (게임 모드일때만 실행되는 함수이기 때문에 게임 모드 아닐때는 Null이 넘어와서 계속 캐스팅이 실패함) 

[3] BP_Player 는 Actor 로 부터 상속받아있음 그래서 "BP_Player 형변환" > "Equipped Sword"

 

--4) Notify 를 복사해 "UnEquipped" 생성

함수 오버라이드 내용을 아래와 같이 변경  

 

이 두가지의 부모는 정의되어 있는데, 재정의해서 return을 해주면 미리 구현된 대로 call을 해 줄것이다. 

함수 오버라이드에 관한 내용은 아래에 정리하도록 하겠다. 

 

4. 컴파일 후 Drawing Sword 2 > Equipped, Sheated Sword 2 > UnEquipped 의 애니메이션이 69% 진행했을 때 각 Notify 를 설정 

* Draw Sword 2 에서 70% 이상 되면 Transition으로 다음 애니메이션을 실행하도록 구현해놓았기 때문에

69% 플레이 되었을때 Call 이 되도록 설정하였다.

 

< 함수 오버라이드 >

부모에 정의되어 있는 함수를 자식에서 자신의 필요에 맞게 재정의해서 사용하는 방식 

재정의가 가능한 함수는 virtual 을 열어줘야하는데 이렇게 재정의가 가능한 함수가 2개 라고 표기되고 있다. 

함수에서 오버라이더블 가능한게 있는지 체크해서 사용하는 습관을 들이는 게 좋다. 

 

5. BP_Player 에다가 custom Event 설정 

* 위와 같이 설정하면 무기를 장착하는 동안 나면 정면을 바라보는 것이 구현된다. 

<사용된 데이터들>

       - Pawn Use Control Rotation : 회전을 캐릭터 방향으로 바꿔줌.   

        (BP_Player > Pawn > Use Control Roatation)

      - Orient Rotation to movement : 이동방향으로 회전하게 함 

        (CharacterMovement > character Movement (Rotation Setting) > Orient Rotation to movement)

* use control Rotation yaw 

자기자신에서 수행하는 것이기 때문에 self > use control Rotation Yaw 와 같음

 

6. 입력액션 설정 

무기장착 입력키가 들어오고, 무기장착이 True 일 때 Sheath Sword 호출 

 

< 오류해결 >

전반적인 구조와 원리, 활용법을 익힌 후 제작에 들어갔으나 두가지 오류가 발생했다. 

 

오류1. AnimNotify 의 Call이 되지 않음 

애니메이션 디버깅을 통해 이부분에 문제가 있다는 것을 파악했다.

AnimNotify 를 심어진 애니메이션이 진행 하다가 다음 애니메이션으로 넘어가기 때문에 그 구간을 충분히 확보하고 

놓아야한다.

Transition 되는값을 0.3으로 두고 Animation 이 70% 진행되기 이전에 했는데도 Call을 받지 않아 충분히 넉넉히 초반에 Call을 하도록 했고, 정상적으로 애니메이션이 진행되었다. 

 

오류2. BS_Sword 애니메이션이 적용되지 않음 

혹시 몰라 기존 노드를 삭제하고 " BS_Sword " 를 새로 불러서 다시 적용해보았다. 

단순 오류인듯, 정상 작동된다. 

 

다음 강의를 통해서, 무기 그래픽을 실질적으로 플레이어에게 착용시키는 작업을 진행할 예정이다. 

" Spawn Actor ", " Attach to the component " 등의 기능을 이용해 허리에 칼을 지니다가 무기전환을 통해 손에 무기를 쥐게하는 구현을 할 예정이다.

 

실제 전투에 사용되는 기능들을 익히다 보니 흥미롭고 기대가 된다.