[TIL] Line Trace & 사격시스템

최석훈·2026년 4월 22일

26.04.22

핵심 개념

  • Line Trace : 가상의 직선을 쏘아 그 선에 부딪히는 물체를 감지하는 기능
  • Muzzle Flash : 총구에서 나오는 불꽃 이펙트 (Niagara System활용)
  • Impact Effect : 충돌시에 발생하는 이펙트 (Cascade Particle System 활용)
  • User Widget : 화면에 표시되는 UI (HP bar, 탄약, 게임재시작 버튼 등)

과정

Line Trace

캐릭터의 주 된 "눈"의 목표점을 찾는 과정
플레이어의 눈(카메라)에서 가상의 직선 레이저를 쏘아 레이저에 닿는 사물 인식

  • 시작점 , 끝점, 결과 설정하기
  1. 먼저 Input Action 생성
    -> (IA_Fire : Value Type : Bool type 생성 (쏜다/안쏜다))

  2. Input Mapping Context(IMC)에 (IA_Fire) 추가 (좌 클릭시 반응하도록 설정)

  3. 캐릭터 BP로 돌아가 IA추가하여 Line Trace By Channel과 연결 (Started로 연결해야 단발사용 가능) (Triggered면 단번에 연발로 쏴버리게 될 것)

4.카메라의 회전, 시작점, 거리 설정

  • 카메라위치, 회전, 거리(4000cm로 설정 + 움직이는 위치에 따른 변화(add))
    Draw Debug Type : none (For Duration시 발사궤적이 보임)

  • Random Float in Range(값의 범위설정)로 Pitch와 Yaw에 랜덤한 범위설정 = 총의 반동


Muzzle Flash

Muzzle Point (총구) Flash 불꽃

  • Niagara : 차세대 VFX(Visual Effects)시스템 *(과거 cascade particle사용)
  1. Feb에서 muzzle flash 검색후 (Niagara System) add project

(필요한 이펙트만 켜고 끌 수 있고, 이펙트 효과 하나하나 Loop설정 및 )

  • Play Sound 2D로 총소리를 넣어주었고, Spawn System Attached로 먼저 설정해둔 Muzzle Point 부분을 위치로 연결하여 받은 Niagara System 적용
    (PIE하며 Rotation으로 자연스럽게 조정)

  • Auto Destroy로 VFX가 메모리에 쌓이지 않도록 삭제

  • 크기조정 : Location Type : Snap to Target, Including Scale : 타겟에 딱 붙고, 부모의 크기에 따라감 -> Muzzle Point 스케일 조정

  • 소리조정 : Volume Multiplier 값 조정


Impact Effact

__총알이나 사물이 벽, 다른 사물에 충돌(impact)시 발생하는 이펙트

  1. Feb에서 (Cascade Particle System)을 받음 [Realistic_Starter_VFX]

(Niagara와 동일하게 필요한 효과만 끄고 킬 수 있다.)

(cascade와 niagara와 필요한 노드가 다름)

  • LineTrace와 Spawn Emitter at Location(넣어줄 효과 적용)연결, 충돌시(상황) 효과가 발생할 수 있도록 Branch 연결
  • 충돌(위치)값에 효과가 발생 할 수 있도록 Location값
  • 발생 효과 저장메모리 자동 삭제기능 (Auto Destroy)

정리꿀팁

Collapse to Function으로 함수 노드를 묶어 정리할 수 있다.
(더블클릭시 정리된 노드 볼 수 있음)


연발설정

  • Started와 bool값으로 눌렀을때만 Line Trace가 발생하도록 설정

  • Interval(간격) + Delay 설정으로 연발 시간 설정 (Branch 발생했을시)


User Widget

크로스헤어, 탄약표시, 체력바 와 같은 UI 시각화 설정

  • Widget Blueprints 생성후 canvas panel 추가

  • progress bar(HP Bar), text (총알,총알수), image(Anchor)
    (위치 변경시 Anchors에서 ctrl+shift 로 클릭하여 이동)

  • text와 HP Bar 크기,위치 및 텍스트 입력, image 적용

(create widget 생성, 맵핑컨텍스트와 연결, 위젯 적용 해주면 노드 이름이 설정한 위젯 이름으로 바뀐다.)

  • 최대 총알수 30발 설정

  • 현재 총알이 1미만인 경우 (실패일때) 발생 , 또는 greater(>)로 0이상일시 (성공)으로 총알이 -1발로 넘어가지 않도록 설정

  • player HUD(설정한 widget)에서 Current Ammo(현재 총알)을 -- 하여 -1씩 감소하도록 설정

  • Current Ammo의 변한 값이 To Text(Integer)로 보이도록 set text와 연결하여 player HUD와 Viewport 연결


Try

[⭐]

  • 탄약(item)을 먹었을때, 탄약이 충전 될 수 있도록 함수 설정
    (추가될 탄약수 AddAmmo(Integer) 변수 추가), (PlayerHUD에 현재 총알수에 먹은 탄약수 만큼 추가되도록 설정)

HUD -> AmmoAmount -> Set Text -> HUD 탄약 텍스트 업데이트

profile
반갑습니다.

0개의 댓글