2024.06.21
깃허브! | 풀리퀘! |
---|---|
★ https://github.com/ChangJin-Lee/SimpleShooter | ★ https://github.com/ChangJin-Lee/Project-Lena/pull/5 |
이번 포스팅에서는 재장전 기능과 재장전 애니메이션을 구현한 과정을 다룹니다.
Gun
클래스를 기반으로 한 블루프린트에서 탄약집 교체를 시각적으로 구현하는 방법을 소개합니다.
Pickup_Item
클래스 추가BP_Rifle
블루프린트 수정Gun
클래스에 재장전 기능을 추가했습니다. 플레이어가 총을 발사할 수 있는 탄환 수를 추적하고, 탄환이 부족할 때 재장전할 수 있도록 했습니다.int ABase_Character::GetAmmo()
{
return GunArray[WeaponActiveIndex]->GetAmmo();
}
void ABase_Character::AddAmmo_5mm()
{
int MaxAmmo = GunArray[WeaponActiveIndex]->GetMaxAmmo();
Ammo_5mm += MaxAmmo;
}
AGun* ABase_Character::GetWeapon()
{
return GunArray[WeaponActiveIndex];
}
bool ABase_Character::ReloadGun()
{
int MaxAmmo = GunArray[WeaponActiveIndex]->GetMaxAmmo();
int CurrentAmmo = GunArray[WeaponActiveIndex]->GetAmmo();
if (!GunArray[WeaponActiveIndex])
return false;
if (CurrentAmmo < MaxAmmo)
{
GunArray[WeaponActiveIndex]->SetAmmo(FMath::Min(MaxAmmo, CurrentAmmo + Ammo_5mm));
Ammo_5mm = FMath::Max(0, Ammo_5mm - (MaxAmmo - CurrentAmmo));
}
return true;
}
void AGun::SetAmmo(int AmmoCount)
{
Ammo = AmmoCount;
}
int AGun::GetAmmo()
{
return Ammo;
}
bool AGun::IsEmpty()
{
return Ammo <= 0;
}
int AGun::GetMaxAmmo()
{
return MaxAmmo;
}
BP_Rifle
블루프린트를 수정하여 M4A1에 magazine 이라는 이름의 탄약집 메시를 Add Static Mesh Component
로 추가했습니다.BP_Rifle의 블루프린트 내용 |
Hide Bone by Name
을 통해 숨겼습니다. 이렇게 하면 탄약집이 분리가 됩니다.탄약집이 선택된 모습. 드래그하여 아래로 조금 이동한 모습 |
재장전 몽타주 |
AnimNotify remove mag | AnimNotify drop mag |
AnimNotify take mag | AnimNotify place mag |
문제:
총이 공중에 떠 있는 문제 |
원인:
원인은 M4A1 Skeletal Mesh를 새로 추가한 WeaponSocket
에 부착하도록 만들었던 것이 문제였습니다.
그리고 BP_Rifle인 Actor가 부착된게 아니라 Skeletal Mesh가 부착된 것이라서 재장전 할때 총알 수의 계산도 어려웠습니다.
해결:
Base_Character 블루프린트에서 총을 장착할 때 attach component to component
가 아닌 actor to component
로 변경하여 BP_Rifle을 장착했습니다.
그리고 WeaponSocket
의 소켓 위치에 BP_Rifle을 추가하는것이 아니라 LHS_ik_hand_r
소켓 위치에 추가했습니다.
Actor Attach Component로 총 블루프린트를 부착 |
총이 공중에 떠 있는 문제 해결 |
IsArmed
변수를 false로 설정하여 총을 쏠 수 없게 하고, 재장전 후 Reload Gun
함수로 탄환 수 갱신했습니다.재장전 애니메이션 트리거 설정 |
이번 포스팅에서는 재장전 기능과 재장전 애니메이션을 구현하며 발생한 문제와 해결 과정을 상세히 다뤘습니다. 특히, 애니메이션 실행 중 발생한 총의 위치 문제를 해결하기 위해 사용된 방법들을 통해 많은 것을 배울 수 있었습니다. 다음 포스팅에서는 더욱 발전된 기능들을 다룰 예정이니 많은 기대 부탁드립니다.
이번 포스팅이 도움이 되셨길 바랍니다. 다음 포스팅도 많은 기대 부탁드립니다!