본문 바로가기

언리얼엔진

19. Weapon 교체 로직 / 선택(Select)

Tip!

마켓 플레이스에서 애니메이션 설명을 보면 어떤 Skeleton을 지원하는지 볼 수 있음.

무기 선택할 때 Root가 어디에 잡혀있는지 꼭 확인해볼 것.


무기 A를 장착 / 해제를 하는 모습

현재까지 무기 A를 장착 / 해제하는 로직까지 만들었다.

하지만 앞으로 무기를 하나만 쓰는 것이 아니라 2개를 바꿔가며 사용할 것이기 때문에 수정이 좀 더 필요하다.

 

WeaponNow 변수를 통해 현재 무기의 장착 여부를 자주 판별하게 되므로, BP_CharacterInterface에서

무기 장착 여부를 확인해줄 함수 IsArmed를 생성하였다.

나중에 외부에서 대상이 무장 중인지 판단하기 위해 인터페이스로 추가하였다.

캐릭터 인터페이스에서 추가한 함수 IsArmed
BP_Character에서 인터페이스 함수를 정의해줌.

 

해서 이벤트그래프에 있던 WeaponNow의 NotEqual 검사를 이런식으로 해당 Is Armed함수로 바꿔주었다.

IsArmed 함수로 변경

 

몽타주에서 Notify Name은 무기를 단순히 탈부착하는 역할로 Notify 하나만 배치되어 있기 때문에 필요 없어진다.

 

이제 무기를 2개 Weapon A / B를 사용하면서 장착과 해제의 경우 어떤 경우들이 있는지부터 확인해야한다.

먼저 크게 2가지의 경우로 나눌 수 있다.

 

1. Weapon A, B 둘 다 장비되지 않은 경우 → 선택한 무기를 장비

 

2. Weapon A 또는 B 하나만 장비했을 때...

    ㄴ 현재 장비한 무기와 다른 무기를 장비할 경우 → 현재 무기를 해제 후, 선택한 무기를 장비

    ㄴ 현재 장비한 무기를 수납할 경우 → 현재 무기를 해제

 

이와 같은 경우의 수를 생각하여 로직을 만들어볼 것이다. 항상 뭔가 만들기 전에 미리 구조를 생각해보자.

여기서 2번의 경우 항상 현재 무기를 해제한다는 공통점을 볼 수 있다. 

 

무기 장착 / 해제 로직


앞에서 다시 몽타주 재생으로 돌아와 반복하게 되면 발생하는 문제점이 있다.

Weapons를 Get으로 선택한 무기(B)를 받아오는데, 반복되는 과정에서 Is Armed는 이미 Weapon Now에 장착한 무기(A)의

값이 있어서 결과로 True(1)가 나와버리기 때문에 나오는 애니메이션 몽타주는 선택한 무기(B)의 해제 애니메이션이

먼저 나와버리게 된다.


선택(Select) 노드

따라서 현재 장비하고 있는 무기가 있다면 장비한 무기의 값이 먼저 들어가야 한다.

이를 해결해주기 위해서 선택(Select) 노드를 사용하였다.

 

특정 타입의 인덱스에 따른 반환 값을 정해줄 수 있는 노드이다.

Index로 IsArmed를 받아서 현재 무기를 장착 했는지 안했는지를 받아와서 값에 따라 WeaponNow(현재 장착한 무기)와 Get Weapons(선택한 무기)를 반환해 줄 것이다.

 

그리고 Is Armed함수가 한번 실행되고 캐싱된 값을 그대로 돌려주고 있기 때문에 함수 내부의 내용을 풀어서

사용해주면 해결된다.