본문 바로가기

언리얼 BluePrint 정리

05/25 학습 정리( Weapon Change 유지보수, Select )

Weapon Change 유지보수

 

장비여부에 따라 무기를 장착, 해제하는 이벤트까지는 만들었으나 무기가 추가되거나

무기 슬롯에 무기가 추가되었을 경우의 이벤트를 처리해주려한다.


무기 슬롯이 추가 되어 무기 슬롯 A,B가 있다고 가정하면

1) 비무장상태 ─ A든 B든 장착한다

2) 무장상태    ─ A or B 무기 장착 상태 ┬─ 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에 저장한다.


라는 형식으로 이벤트 그래프를 만들어 가기로 한다.         

 

우선 장비여부를 검사하는 NotEqual노드를 인터페이스화 시켜 간소화 시켜준다.(이름은 IsArmed)

 

우선 무기가 추가 되었으니 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무기 수납 애니메이션이 나온다.

 

A무기 장착상태로 B무기 장착해제 애니메이션이 나오고 B무기 장비 애니메이션이 나옴
Select 노드를 이용하여 Index에 따른 반환값을 지정하여 타깃을 변경시킴

Select노드를 이용하여 WeaponNow가 None이면 GetWeapon값을 None이 아니면 WeaponNow값을 가져와 GetStateMontageData함수의 타깃으로 설정한다.

IsArmed 인터페이스는 비순수 함수라서 Select의 Index값에는 사용할 수 없다.


Select

 

Index에 따른 반환값을 지정해주는 노드로 주어진 조건에 따라 변수를 반환시키기 위해 활용

입출력 타입이 와일드카드라서 상황에 맞게 사용가능하다.(Select로 검색)