앞으로 여러 가지 무기를 장착 해제를 하기 위해 이벤트를 수정할 것이다.
장비 교체를 생각해 보자
1. 둘 모두 장비하지 않은 경우 : 선택 무기를 장비
2. 하나를 장비한 경우
2-1. 다른 무기를 장비할 경우 : 현재 무기를 수납, 선택 무기를 장비
2-2. 현재 무기를 수납할 경우 : 현재 무기를 수납
로직이 짜보기 전에 순서를 정리해 본다.
1) 비무장상태 ─ A든 B든 장착한다
= 장착 애니메이션 시퀀스가 재생되며 Equip Weapon함수 실행, 입력받은 Weapon값을 Weapon Now에 저장한다.
2-1) 무장상태 ─ A or B 무기 장착 상태 ─ 현재 무기를 수납하도록 명령 ─ 무기를 해제
= 해제 애니메이션 시퀀스 재생되며 Unequip Weapon함수 실행, Weapon Now값을 None으로 저장한다.
2-2) 무장상태 ─ A or B 무기 장착 상태 ─ 다른 무기를 장착하도록 명령 ─ 현재 무기를 수납 ─ 다른 무기를 장착
= 해제 애니메이션 시퀀스 재생되며 Unequip Weapon함수 실행, Weapon Now값을 None으로 저장
재생 애니메이션 시퀀스 재생되며 Equip Weapon함수 실행, 입력받은 Weapon값을 Weapon Now에 저장한다.
인터페이스에 IsArmed를 추가한다.
IsArmed에는 출력만 추가해 준다.
그다음 BP_Character에서 IsArmed로 들어가 장비 여부를 검사하는 NotEqual노드를 인터페이스화 시켜 간소화시켜 준다.
요약하면
BP_Character -> Is Armed에서 Weapon Now(현재 장착한 무기)가 None와 비교하여 True 또는 False를 내보낸다.
Weapon Now!= None = True
Weapon Now == None = False
이제 장비 A와 B를 교체하는 이벤트그래프를 만들어보자.
우선 무기가 추가되었으니 Equip Weapon 함수의 BP_Weapon은 현재 장비하려는 Get Weapon값을 Unequip Weapon 함수의 BP_Weapon은 WeaponNow에 저장되어 있는 현재 장비를 연결시켜 준다.
Is Armed로 장비여부를 판단하여 Equip과 Unequip으로 분기를 나눠주고 현재 장착장비와 입력받은 장비의 값을 대조하여 수납인지 다른 무기 장착인지로 분기를 나눠준다.
이때 문제점이 하나 생기는데 A를 장비하고 있는데 B를 장비하도록 명령하면 A를 수납 후 B 장착 애니메이션이 재생되는데
GetStateMontageData에 들어가는 BP_Weapon값이 GetWeapon으로 가져온 B무기가 들어가 A무기를 수납해야 하는데 B무기 수납 애니메이션이 나온다.
Select노드를 이용하여 WeaponNow가 None이면 GetWeapon값을 None이 아니면 WeaponNow값을 가져와 GetStateMontageData함수의 타깃으로 설정한다.
IsArmed 인터페이스는 비순수 함수라서 Select의 Index값에는 사용할 수 없다.
현재 장착한 무기와 교체할 무기가 다른 경우일 때 Set WeaponNow에서 다시 실행이 앞으로 흘러와 몽타주를 재생으로 연결시켜져 있을 텐데 무기를 교체할 때마다 같은 애니메이션이 반복하는 문제를 수정해 보자.
Set WeaponNow에서 Is Armed함수로 실행핀을 옮김으로써 현재 무기를 해재 후, 교체할 무기의 애니메이션이 자연스럽게 나오도록 수정했다.
Select
Index에 따른 반환값을 지정해 주는 노드로 주어진 조건에 따라 변수를 반환시키기 위해 활용
입출력 타입이 와일드카드라서 상황에 맞게 사용가능하다.
'[unrealengine4]' 카테고리의 다른 글
2023-05-30 언리얼 수업 내용(콤보공격, AnimNotifyState, Does Implement Interface) (0) | 2023.05.31 |
---|---|
2023-05-26 언리얼 엔진 수업내용(Slot, Ceched,root motion) (0) | 2023.05.30 |
2023-05-24 언리얼 수업 내용(Notify) (0) | 2023.05.25 |
2023-05-23 언리얼 수업 내용(몽타주,parameter, 블루프린트 오류, c++와 블루프린트 차이점) (0) | 2023.05.24 |
2023-05-22 언리얼 수업 내용(매크로 라이브러리, 몽타주, 구조체) (0) | 2023.05.23 |