2026-04-24(금) AnimNotify CollisionOverlap, Hit, Trace, LineTrace, Projectile, TraceChannel

조범근·2026년 4월 24일

TIL

목록 보기
49/81

C++ Week 9

Study

언리얼C++ 기초, 알고리즘 1문제



Today I Learned


UnrealC++

Anim Notify

애니메이션의 특정 프레임에서 게임 로직을 실행시키기 위한 타이밍 이벤트이다. 애니메이션이 재생되는 정확한 순간에 맞춰 코드나 이벤트를 실행하기 위해 사용한다.





Collision

Unreal에서 Collision은 단순히 “부딪힌다”가 아니라, World에서 Actor나 Component가 서로 어떻게 반응할지 정하는 시스템이다.

충돌을 이해할 때는 세 가지를 나눠서 봐야 한다.

  1. Collision Enabled -> 이 충돌체가 어떤 기능을 할 수 있는지 정하는 것
  • Query Only -> Overlap, Trace처럼 탐지만 하는 용도
  • Physics Only -> 물리 반응만 하는 용도
  • Query and Physics -> 둘 다 가능하지만 그만큼 계산할 일이 많음
  1. Object Type -> 이 Component가 어떤 종류의 물체인지 나타내는 것 Pawn, WorldStatic, WorldDynamic 등이 있음

  2. Collision Responses -> Obejct Type이나 Trace Channel을 만났을 때 Ignore, Overlap, Block 중 어떻게 반응할지 정한다


Overlap, Hit, Trace

Overlap -> 서로 통과할 수 있지만 이벤트가 발생하는 반응이다. 아이템 획득, 트리거 박스, 공격 범위 감지처럼 "닿았는지 알기만 하면 되는 경우"에 사용 가능하다.

Hit -> 서로 막히는 충돌에서 발생하는 이벤트. 벽에 부딪히거나 물리적으로 막히는 상황

Trace -> 실제 충돌체가 계속 닿아 있는지 보는 것이 아니라, World에 보이지 않는 검사선을 쏴서 무엇에 닿는지 확인하는 방식

게임하면서 종종 보이는 RayTracing도 비슷한 개념이다. RayTracing은 빛/반사/그림자를 계산해서 화면을 더 사실적으로 그리는 것이지만, 둘 다 "선을 쏴서 무엇에 닿는지 확인한다는 출발점은 비슷하다.


LineTrace와 Projectile

LineTrace는 발사 순간 보이지 않는 선을 한 번 쏴서 맞은 대상을 즉시 계산하는 것이다. 이 방식은 총알 Actor가 실제로 날아가는 것이 아니라, 오버워치 같은 FPS게임에서 '히트스캔'방식으로 쏘는 캐릭터들(소전 우클릭/ 캐서디 좌클릭) 같이 총알궤적만 보이거나 레이저를 쏘는 캐릭터들에 화면에 보이는 이펙트는 판정과 분리된 연출 일 수 있다.

발사 입력
-> LineTrace 실행
-> 맞은 Actor 확인
-> 데미지 처리
-> 탄흔/궤적 이펙트 출력

이런 방식을 히트스캔 방식이라고 볼 수 있다.

반대로 Projectile 방식은 총알, 화살, 로켓 같은 Actor가 실제로 월드에 생성되고 날아가다가 Collision에 닿으면 판정이 발생하는 방식이다.

발사 입력
-> Projectile Actor Spawn
-> Proejctile이 이동
-> Collision Hit/Overlap 발생
-> 데미지 처리
-> Projectile 파괴

이처럼 빠른 소총/권총은 히트스캔 방식이 어울릴 수 있고, 로켓/화살/느린 에너지탄처럼 날아오는 것을 보고 피해야 하는 무기는 Projectile 방식이 더 어울린다.

여기서 주의해야할 것은 Projectile방식도 '총알이 캐릭터의 뒤로 지나갔는데 그 순간 캐릭터가 그 위치로 움직여서 총알을 뒤에서 맞는다던가' 하는 예외상황이 존재하기 때문에, 내부적으로 이전 위치에서 현재 위치까지 Sweep/Trace같은 검사를 사용할 수 있다. 그래서 Trace는 히트스캔 전용이라기보다는, World에 "이 경로에 맞은 것이 있는가?"라고 묻는 검사 방식으로 이해하는 것이 좋다.


TraceChannel

TraceChannel은 Trace가 어떤 대상과 반응할지 정하는 필터이다. 이 검사가 어떤 종류의 물체를 맞출 수 있는지를 정한다.

예를들어 Attack이라는 Trace Channel을 만들면, 공격 판정용 검사라는 이름표를 만든 것이다. 그 다음 각 Collision Preset에서 Attack채널에대해 Ignore, Overlap, Block 중 어떤 반응을 할지 정한다.

Attack Trace 실행
-> Attack 채널을 Block하는 대상은 결과에 잡힘
-> Attack 채널을 Ignore하는 대상은 무시됨

0개의 댓글