본문 바로가기

언리얼엔진

21. 연속 공격 구현 / 노티파이 스테이트

캐릭터 연속공격 구현

몽타주 애니메이션 생성 및 적용

마우스 클릭을 통한 공격을 위해 먼저 Attack의 몽타주 애니메이션을 사용할 데이터에셋(SwordActingData)를 생성한다.

(Attack_1 ~ 4까지 애니메이션의 몽타주를 생성해주고 SwordActingData에 넣었다. 몽타주의 슬롯도 FullBody로 변경)

SwordActingData의 설정

 

이어서 만들어준 SwordActingData를 사용하기 위해 BP_Sword의 Montage Data map에 새로 추가해준다.

BP_Sword에서 Montage Data Map에 추가함


공격키 입력 추가

마우스 좌클릭과 우클릭으로 공격을 구현할 것이다. 

액션 매핑에 공격 좌클릭 / 우클릭 추가

 

캐릭터의 입력을 담당하는 BP_PlayerController에 가서 ActionA, ActionB 추가하여 메시지 발생시키기.

BP_CharacterInterface에서 발생시킬 메시지 함수를 먼저 만든다.

Begin/EndActionA, Begin/EndActionB 함수 추가

 

이후 BP_PlayerController에서 각각 연결해줘서 입력 시 메시지를 보내게 된다.

이제 보내진 메시지 이벤트를 Character에서 받아서 이어지게 된다.


몽타주 애니메이션의 Blend In / Blend Out

애니메이션 몽타주의 옵션 Blend

- Blend In : 해당 몽타주를 재생할 시, 기존의 애니메이션과 현재 몽타주를 어느정도 혼합시켜 재생될 지 정한다.

- Blend Out : 해당 몽타주 재생이 끝나갈 때, 다음 애니메이션으로 넘어갈 때 어느정도 혼합시켜 넘어갈 지 정한다.

 

만약 몽타주와 몽타주 사이의 Blend  Out/In은 무조건 다음 몽타주의 Blend In의 옵션이 우선 시 된다.

 

결국 하나의 몽타주에 각 Attack 몽타주들을 모아서 재생하는 것보다, 개별적으로 사용하는 것이 좀 더 자연스러운 애니메이션 재생을 나타내줄 수 있다.(그래서 이곳에서 노티파이를 사용하지 않았다.)


노티파이 스테이트(Notify State)

애니메이션 몽타주에서 노티파이 트랙에 추가 가능

노티파이 스테이트를 추가하여 사용할 수 있다. Begin과 End를 가지고 있다.


노티파이 스테이트는 블루프린트 클래스로 따로 만들어줄 수도 있다.

모든 클래스 선택에서 AnimNotifyState를 선택하여 추가한다.(ANS_AttackEnabled)

 

이렇게 만든 AnimNotifyState 내부에 오버라이드 가능한 함수를 보면 4가지가 있다.

- Get Notify Name : 지정한 이름으로 NotifyName 출력

- Received Notify Begin : 시작지점 호출

- Received Notify End : 끝 지점 호출

- Received Notify Tick : 해당 노티파이 스테이트 구간에 진입 시 계속 호출


Does Implement Interface

특정 오브젝트를 받아와서 선택한 Interface를 구현했는지 여부를 확인해주는 노드이다.

이를 통해 Interface가 구현되어있지 않다면 Return Value로 그 여부를 반환해줌으로써 Interface의 구현 여부를 확인한다.

(IsValid와 비슷)