언리얼 기초 65 Animation Montage (3)

AnimNotify

애니메이션 에셋이나 몬타지에는 플레이중인 애니메이션의 특정 시점에 외부로 이벤트를 발생시킬 수 있다.

이를 Notify(또는 Anim Notify)라 한다.

AM_Gideon_Combat 애님 몬타지 오픈 -> 그래프 Notifies 라인 ->그래프 라인 “1” 부근 우클릭 -> Add Notify -> New Notify 클릭 -> 이름 AttackEnd 설정 ->

만들어진 AttackEnd 태그 2회 복사 (Ctrl + C, Ctrl + V) -> 만들어진 세개의 AttackEnd Notify 태그를 각 어택 섹션의 끝부분에 적당히 배치 -> Save

각 각 공격 애니메이션에서 스윙모션이 끝나는 시점에 이 AttackEnd 노티파이를 붙여두자.

Attack Flag

이제 BP_Gideon에 True, False를 가지는 Boolean 변수 하나를 만들고 초기값을 False로 설정

My Blueprint 탭 -> VARIABLES -> 추가버튼(+) -> 타입 Boolean -> 이름 IsInAttack -> Compile -> Save -> IsInAttack 변수 선택후 우측 Datails 패널 -> Default Value에 is in Attack 항복 체크 해제 확인

IsInAttack 변수 우측에 감은눈을 클릭해 뜨게 해주자

이는 변수를 Public세팅 해준다. 이 변수를 블루프린트내에서 쓸뿐만 아니라 외부에서도 참조 할 수 있도록 공개형태로 바꾸는 것.

키입력을 받고 Attack 몬타지를 플레이하기 실행흐름에 Branch노드 삽입

Branch는 프로그래밍 언어의 If문과 같다.

현재 공격중이 아닐때만 다음 노드를 실행하도록 IsInAttack Get노드와 NOT노드를 아래처럼 연결

어택 모션의 애니메이션 몬타지의 세션을 실행한 직후, Montage Jump to Sections 노드 직후 IsInAttack 변수를 Set 노드를 이용해 True로 Set 해주자

이후 Compile -> Save

이러면 유저가 처음 H키를 눌러 공격모션을 플레이할때 IsInAttack 변수는 False에서 True로 세팅된다.

이후 다시 H키를 누르면 시작지점 세팅한 Branch 노드에서 이 변수가 False가 될때까지 더 이상의 실행 흐름을 진행하지 않을 것이다.

플레이 해보면 그렇게 된다.

IsInAttack 변수 False 세팅

기디언의 ABP를 오픈하자(Gideon_ABP_Manny)

여기 Event Graph에선 이 ABP의 오너 블루프린트 BP_Gideon에 대한 참조 변수 Character를 (생성시)세팅해두고 사용하고 있다.

앞서 만든 BP_Gideon의 변수 InInAttack는 public 변수이기에 ABP의 이 Character변수를 통해 사용할 수 있다.

Event Graph 하단 빈공간 우클릭 -> AttackEnd 검색 -> Event AnimNotify_AttackEnd 추가

애니메이션 몬타지가 실행되고 AttackEnd 세션 끝부분에 있는 Notify까지 도달했을때 이 이벤트가 불린다.

InInAttack 변수를 False로 만들어주자

VARIABLES에서 Character 변수 Get Node로 드래그인 -> Cast To BP_Gideon 노드로 캐스팅 -> 해당 노드 As BP Gideon 아웃풋핀에서 IsInAttack 변수 Set 노드로 드래그 아웃 -> Is in Attack 체크박스 해제 유지(False) -> 실행 핀 세팅 -> Compile -> Save

플레이 해보면 이제 H 키를 아무리 눌러도 공격모션이 중복 실행되지 않는다.

Leave a Comment