🚩 AR4 (Rifle, 소총) Equip
AR4 ("1")의 입력을 받으면 플레이어가 AR4 총을 드는 Equip 기능을 구현하였다.
Weapon Component를 이용하여 Weapon을 상속받는 각각의 무기들을 제어하는 것과 같이 프로그램의 전체적인 구조는 블루프린트에서 구현했던 구조와 비슷하게 구현하였다.
AR4를 장착하기 위한 SetMode 함수가 수행될 때, 현재 무기의 Type이 장착중인 무기와 같다면 무기를 해제하도록 SetUnarmedMode를 호출하였고, 현재 장착중인 무기가 아니라면, Unequip할 수 있는 상태인지를 확인한 뒤, Unequip 함수로 장착해제하고, 매개변수로 받아온 새로운 무기 Type을 장착하였다.
Equip과 Unequip이 가능한지를 검사하는 함수 CanEquip(), CanUnequip()을 각각 제작하였다.
bool 변수를 선언한 뒤, OR 연산을 이용하여 하나라도 만족하지 않는 조건이 있다면 false를 반환하도록 구현하였다.
무기를 장착/해제 하려면 장착중(bEquipping)이 아니어야 하고, 재장전(bReload)중이 아니어야 하고, 총을 쏘는중(bFiring)이 아니어야 한다.
Equip 함수에서 PlayAnimMontage 함수를 호출하여 매개변수로 몽타주와, 애니메이션 실행 속도를 전달하였다.
💡 Montage (PlayAnimMontage)
몽타주는 Weapon 클래스에서 UAnimMontage 객체로 변수를 만들어두었고, 무기별로 장착 애니메이션이 다르기 때문에 몽타주의 초기화는 Weapon을 상속받는 AR4 클래스에서 진행하였다.
AR4 클래스의 생성자에서 Equip 시 총이 위치할 소켓(Hand) 이름과, Unequip 시 총이 위치할 소켓(Holster) 이름, Equip 몽타주 등을 초기화해주었다. (LeftHandleLocation 변수는 손 IK 구현에 사용한 변수로 나중에 설명함)
Unequip도 Equip과 동일한 방법으로 구현하였다.
결과적으로 Equip 시 AR4를 장착하는 애니메이션이 실행되며 성공적으로 무기가 장착되었다.