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 " 등의 기능을 이용해 허리에 칼을 지니다가 무기전환을 통해 손에 무기를 쥐게하는 구현을 할 예정이다.
실제 전투에 사용되는 기능들을 익히다 보니 흥미롭고 기대가 된다.
'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글
[20강] Animation Montage (2) | 2023.10.12 |
---|---|
[19강] Spawn Actor & AttachToComponent (1) | 2023.10.06 |
[17강] State Machine(Draw / Sheath) (1) | 2023.10.05 |
[16강] Animation Retargeting - 문제해결 (1) | 2023.09.06 |
[16강] Animation Retargeting - 2 (0) | 2023.08.18 |