VIGlockWeapon
Weaponbase에서 상속받아 VIGlockWeapon을 만들고 블루프린트도 만들어 부모 클래스를 VIGlockweapon으로 설정해 주었습니다.
그리고 메쉬를 변경해 주었고, PointLight 와 Muzzle, MuzzleFlash 등을 메쉬에 맞게 조정해주었습니다.
WeaponBase 에서 선언해놓은 순수 가상함수들을 오버라이드 해 주어서 기능을 구현했습니다. VIAKWeapon과 다른 점은 재생하는 에셋만 입니다.
++) 24.06.19 수정사항
ChildActorComponent 부착 후 override 된 메서드들 호출 시 에디터가 읽어들이지 못해 순수 함수 매크로를 지우고, 빈 선언만 Weaponbase에 놔두었습니다.
Weapon Swap
그리고 VICharacter 의 구현을 조금 변경하였는데, 월드에서 첫 번째로 AK 무기를 스폰하였던 것 뒤에 부무기 Glock을 소환해 주었습니다. bEquippedWeapon 불리언을 통해 주무기를 장착했을 때가 true, 부무기가 장착되었을 때 false 로 설정됩니다.
InputAction에 1번, 2번 숫자 버튼을 추가한 다음, 각 버튼을 누를 때마다 Visibility 를 조절해주어 무기를 변경할 수 있게 해 주었습니다.
void AVICharacter::EquipFirst()
{
if (!bIsReloading)
{
D("EquipFirst")
bEquippedWeapon = true;
PrimaryWeapon->GetRootComponent()->SetVisibility(true);
SecondaryWeapon->GetRootComponent()->SetVisibility(false);
}
}
void AVICharacter::EquipSecond()
{
if (!bIsReloading)
{
D("EquipSecond")
bEquippedWeapon = false;
PrimaryWeapon->GetRootComponent()->SetVisibility(false);
SecondaryWeapon->GetRootComponent()->SetVisibility(true);
}
}
그 후 불리언을 통해 분기를 하여 캐릭터에서의 Fire, Reload 애니메이션이 알맞게 재생되도록 로직을 구성했습니다.
void AVICharacter::Fire()
{
UE_LOG(LogTemp, Log, TEXT("Fire"));
if (bIsReloading) return;
if (bEquippedWeapon)
{
PrimaryWeapon->Fire();
if (PrimaryWeapon->GetAmmoCount() > 0)
{
//Play Montage
FirstPersonMesh->GetAnimInstance()->Montage_Play(AKFireActionMontage, 1.0f);
}
}
else
{
SecondaryWeapon->Fire();
if (SecondaryWeapon->GetAmmoCount() > 0)
{
//Play Montage
FirstPersonMesh->GetAnimInstance()->Montage_Play(GlockFireActionMontage, 1.0f);
}
}
}
실행 영상
깃허브
GitHub - chataeg/VI
Contribute to chataeg/VI development by creating an account on GitHub.
github.com
'언리얼엔진5 > FPS 게임 1인 프로젝트' 카테고리의 다른 글
[UE5 FPS 프로젝트] 6. ADS(조준) 시스템 (0) | 2024.06.18 |
---|---|
[UE5 FPS 프로젝트] 4. 총알 궤적, 총구 화염, 총알 자국, 탄퍼짐 구현 (0) | 2024.06.14 |
[UE5 FPS 프로젝트] 3. HUD 및 피격 구현 (0) | 2024.06.13 |
[UE5 FPS 프로젝트] 2. 발사 및 재장전 구현 (0) | 2024.06.13 |
[UE5 FPS 프로젝트] 1. 1인칭 구현 및 무기 부착 (0) | 2024.06.12 |