
Interpolation Scene Components탄약의 경우 무기와 동일한 위치로 보간되는 것이 다소 어색해보인다.탄약과 무기의 보간 위치를 다르게 설정해줄 것이며,또 여러개의 탄약이 있는 경우에 대해서도 다른 위치에 보간되도록 해보자. 먼저 이를 USceneComponent로 다루게 되며, 무기 1개 탄약 6개에 대한 변수를 선언해줄 것이다. 이제 해당 컴포넌트에 각각 Static Mesh를 생성하여 각각에 맞는 Mesh를 할당해줄 것이다.여기서 총기 Mesh는 호환이 불가능한 에셋이여서 일단 임시용으로 강의와 다른 Mesh(드릴)을 할당해주었다.나머지 총알은 기존에 있던 Shells_45_Ammo를 사용할 것이며, 전보다 작은 smaller 버전을 선택할 것이다.그리고 각각 위치를 따로 잡아주자..

Pickup Ammo on OverlapE 키를 눌러서 총알을 줍는 것 뿐만 아니라 총알을 지나칠 때도 바로 총알을 줍게 만들어보자.Sphere를 이용한 오버렙 이벤트를 통해 구현할 것이기 때문에 필요한 변수부터 선언해주자. Item 클래스에서도 사용한 적 있는 OverLap 함수를 이름만 바꿔서 또 사용할 것이다. 그리고 게임 시작시 바인딩을 해줄 것이다. 이제 오버랩된 캐릭터가 유효하면 StartItemCurve() 함수를 호출한다.이후 탄약은 사라지므로 충돌 판정도 없애준다. 이러면 PickupSound가 SelectButtonPressed() 함수에 있기에 해당 사운드가 들리지 않는다.따라서 PickupSound 호출해주는 부분을 StartItemCurve() 함수로 위치를 조정해주자.

Bind Ammo CountAmmo Count에 대해 하드코딩한 것을 수정해보자.무기에 대한 위젯을 만들 때 바인딩했던 작업을 똑같이 해줄 것이다. 이번엔 Item Reference가 아닌 Ammo Reference 변수가 필요하다. 이를 Bp_AmmoPickup 클래스 graph 창에서 생성해주자. 그리고 Ammo BP 클래스로 가서 Ammo Reference 변수에 대한 값을 세팅해주자. 이제 이를 토대로 바인딩을 해줄 것이다. 전에 설정했던 20개가 그대로 반영된 것을 볼 수 있다.

Ammo WidgetAmmo에 대한 위젯도 만들어주자. 만들고 나서 크기는 Custom으로 설정해줄 것이다. 이제 Overlay와 hoirzontal Box/vertical box 등을 이용해 위젯을 꾸며주자.배경용 이미지를 하나 맨 위에 설정했고, 캔버스 패널을 통해 아이콘 이미지들을 앵커를 이용한 정렬을 해주었다.다음 강의에 이어서 Ammo Text Box에 대해 위젯을 마저 꾸며주게 된다.

Pickup Ammo Function 이제 탄약을 습득하는 기능도 구현하자.먼저 Ammo 클래스 헤더에 AmmoType 헤더를 추가해줄 것이다. 그리고 해당 타입에 대한 변수와 Getter() 함수를 작성해주자. 다음으로 Item 클래스의 ItemCount에 대해서도 Getter() 함수를 작성해주자. 이제 ShooterCharacter 클래스에서 탄약을 줍는 기능을 구현해줄 것이다. 줍는 것에 대한 함수는 GetPickUpItem 함수가 존재한다.해당 함수를 통해 Ammo가 존재한다면 위 PickupAmmo 함수를 호출시킬 것이다. 이제 메인인 PickupAmmo() 함수다.현재 Ammo에 대한 타입이 AmmoMap에 있는지 체크하고, 이에 대한 Count을 체크할 것이다.해당 탄약 개수를 기존 탄약개..

Overriding SetItemProperties일단 오버랩 이벤트를 위해 Sphere Radius를 조정하고 이를 보이도록 설정해주자. 현재 컴파일하고 E키를 눌러 아이템을 픽업하면 전과 달리 제대로 보간 작업이 이루어지지 않는다.이는 SetItemProperties 함수에서 ItemMesh에 대해서 설정을 해줬는데, 우리는 AmmoMesh를 다루기에 발생하는 문제이다.따라서 해당 함수를 오버라이드 하여 재정의해줄 필요가 있다. Super를 통해 기존 기능도 활성화를 해주고, 기존 함수 내용을 전부 복사해오자.그리고 ItemMesh 부분을 전부 AmmoMesh로 바꿔주고 나머지 내용은 Super를 통해 작동하므로 전부 삭제해주자. 이제 컴파일 하면 다시 정상적으로 보간이 작동한다.

Ammo ClassItem 클래스를 기반으로 Ammo C++ 클래스를 생성해주자 생성자랑 필요한 기본 StaticMeshComponent와 해당 Mesh에 대한 getter() 함수도 생성해주자. 생성자에서 초기화 및 루트로 설정해주자. 이제 해당 C++ 클래스를 기반으로 블루프린트 클래스도 생성해주자. Collision Box와 Area Sphere 범위를 적절히 조정해주자. 이제 Tick() 함수와 BeginPlay() 함수도 생성해주자. 그리고 생성자에서 CollisionBox와 PickupWidget, 마지막으로 AreaSphere를 루트에 붙여줄 것이다.해당 값들은 Item 클래스에 있는 값들을 가져오므로 Getter() 함수를 사용해 호출한다. 컴파일 해보면 다음과 같이 추가된 모습을 볼 수 ..