본문으로 건너뛰기

권총 조준·사격 시스템

목적과 현재 범위​

플레이어가 조준 자세로 전환해 권총을 단발 사격하는 현재 C++ 동작과 참조 에셋을 기록한다. 권총은 별도 EAbilityType이 아니며, AKzPlayerCharacter의 bPistolAiming 상태로 관리한다.

현재 사격은 투사체가 아닌 즉시 Line Trace 방식이다. 탄약, 장전, 탄창, 발사 모드 전환 기능은 구현되어 있지 않다.

입력과 상태 전환​

입력처리
IA_BombThrow 시작, 폭탄 보유 중현재 선택된 리모트 폭탄에 RemoteBombThrow 입력을 전달한다.
IA_BombThrow 시작, 폭탄 미보유BeginPistolAim()을 시도한다.
IA_BombThrow 완료 또는 취소권총 조준을 종료한다.
IA_Attack, 조준 중FirePistol()을 호출한다. 근접 공격 및 블루프린트 공격 이벤트는 함께 호출하지 않는다.
IA_Attack, 비조준 중기존 근접 공격 흐름을 실행한다.
능력 사용·상호작용·메뉴·능력 휠·Traversal 입력권총 조준을 종료한다.

IA_BombThrow는 폭탄을 든 상태에서 던지기에 사용하고, 그 외에는 권총 조준을 시작하는 겸용 입력이다. 조준 중에도 이동 입력은 받아 이동하지만, 캐릭터 회전은 이동 방향으로 직접 돌리지 않고 컨트롤러 방향을 따른다.

권총 조준은 EPlayerState에 새 항목을 추가하지 않는다. BeginPistolAim()은 현재 상태가 Normal 또는 StasisActive일 때만 허용하므로, 타임록 중에도 권총을 조준할 수 있다. 타임록 대상에 맞히면 기존 HandleAttackHit() 경로로 타격 힘을 전달한다.

조준 가능 조건​

조준 시작 및 매 프레임 유지 여부는 CanAimPistol()이 판정한다. 다음 조건을 모두 만족해야 한다.

  • 유효한 Controller가 있다.
  • 플레이어 상태가 Normal 또는 StasisActive다.
  • 캐릭터가 지면에 있다.
  • 벽을 오르거나 물 밖으로 오르는 동작 중이 아니며, 호버 중도 아니다.
  • 권총 메시가 로드되어 있다.
  • 리모트 폭탄을 들고 있지 않으며 폭탄 던지기 애니메이션도 재생 중이 아니다.

조준을 시작하면 걷기 방향 회전 설정을 저장하고 Controller 방향 회전으로 전환한다. 조준 종료 시 저장한 이동 회전 설정을 복원한다.

카메라와 애니메이션​

  • 권총 조준 알파는 초당 6.0 속도로 전환한다.
  • 카메라는 조준 중 FOV 65°, 스프링 암 길이 190 cm, 소켓 오프셋 (0, 65, 25) 쪽으로 보간한다. 종료 후 시작 시 저장한 값으로 복귀한다.
  • 조준 피치는 -80°부터 80°까지 제한한다.
  • 장착 애니메이션은 PistolUpperBody 슬롯에서 재생하며, 준비 시간은 0.56초다.
  • 사격 애니메이션도 PistolUpperBody 슬롯에서 재생한다.
  • 애니메이션 유틸리티는 ABP_Soldier에 상체 슬롯과 아래·수평·위 조준 Blend Space를 구성하는 InstallPistolLayer()를 제공한다. 이 함수는 C++ 소스에서 자동 호출되지 않는다. 실제 AnimGraph 슬롯 연결과 PIE 포즈는 에셋 및 에디터에서 확인해야 한다.

사격과 피격 판정​

사격은 조준 중이고 장착 준비 시간과 발사 간격이 지난 경우에만 시작한다. 발사 간격 기본값은 0.22초다.

  1. 카메라 시점에서 조준 방향으로 최대 사거리까지 Trace해 조준점을 구한다.
  2. 캐릭터 가슴에서 권총 총구까지 먼저 Trace한다. 이 경로가 벽에 막히면 벽 너머로 쏘지 않는다.
  3. 총구에서 조준점까지 Trace해 첫 충돌 지점을 결정한다.
  4. 충돌하면 ApplyPointDamage()를 적용하고 UPlayerAbilityComponent::HandleAttackHit()에도 적중 정보를 전달한다.
  5. 충돌 지점에 Niagara 적중 효과를 재생하고, 총구에서 적중점까지 Tracer·섬광·사격음을 짧게 표시한다.

사거리 기본값은 10000 cm, 피해량 기본값은 100이다. 둘 다 캐릭터의 Combat|Pistol 설정에서 조정할 수 있다. 사격 수와 마지막 적중 위치도 캐릭터에서 조회할 수 있다.

시각 요소와 에셋​

용도에셋
손에 부착하는 권총 메시/Game/Resources/Soldier/Weapons/Pistol/SM_Pistol_Prototype
발사음/Game/Resources/Soldier/Weapons/Pistol/S_Pistol_Shot
Tracer 재질/Game/Resources/Soldier/Weapons/Pistol/M_Pistol_Tracer
적중 효과/Game/Resources/VFX/Combat/Niagara/NS_WeaponSurfaceImpact
장착 애니메이션/Game/Resources/Soldier/Anims/Pistol/AS_Soldier_Pistol_Equip
사격 애니메이션/Game/Resources/Soldier/Anims/Pistol/AS_Soldier_Pistol_Fire
조준 Blend Space용 클립AS_Soldier_Pistol_AimDown, AS_Soldier_Pistol_AimCenter, AS_Soldier_Pistol_AimUp
조준 Blend Space/Game/Resources/Soldier/Anims/Pistol/BS_Soldier_PistolAim

권총 메시와 Tracer는 충돌 및 오버랩을 사용하지 않는다. 조준점은 로컬 UKzPistolReticle 위젯이 조준 중 화면 중앙에 그린다.

관련 코드​

  • AKzPlayerCharacter: 권총 메시, 조준 상태, 카메라, Trace 사격, 피해와 시각 효과
  • AKzPlayerController: 폭탄 던지기 입력과 권총 조준 분기, 조준 중 공격 입력
  • UKzSoldierAnimationAssetUtility: 조준 Blend Space와 PistolUpperBody AnimGraph 레이어 편집 유틸리티
  • UKzPistolReticle: 조준점 렌더링

실제 입력 동작, 애니메이션 포즈, 총구 위치와 Trace 일치 여부는 Unreal Editor의 PIE에서 확인해야 한다. 이 문서는 소스와 에셋 경로 기준이며, 플레이 검증 완료를 뜻하지 않는다.