파티클과 블루프린트 연동
지난 절에서는 오브젝트에 물리 시뮬레이션을 적용하고 질량이나 힘을 제어하는 기본적인 방법을 알아보았습니다. 이제 물리 시뮬레이션의 핵심이자 게임플레이 상호작용의 근간이 되는 콜리전(Collision) 에 대해 다룰 차례입니다. 콜리전은 오브젝트들이 서로 부딪히고 반응하는 방식을 정의하며, 이를 통해 데미지, 상호작용, 물리적 피드백 등 다양한 게임플레이 요소를 구현할 수 있습니다.
이번 절에서는 언리얼 엔진에서 콜리전 설정을 하는 방법과 콜리전 이벤트를 처리하여 게임플레이 로직과 연동하는 방법에 대해 자세히 알아보겠습니다.
콜리전(Collision)이란 무엇인가?
콜리전(Collision) 은 게임 월드 내의 오브젝트들이 물리적으로 서로 부 딪히는 것을 감지하고 반응하는 시스템입니다. 실제 메시(Static Mesh, Skeletal Mesh 등) 자체가 물리 계산에 직접 사용되기에는 너무 복잡하므로, 언리얼 엔진에서는 실제 메시를 둘러싸는 단순화된 형태의 콜리전 메시(Collision Mesh) 를 사용합니다. 이 콜리전 메시들은 서로 교차하는지 여부를 검사하여 충돌을 감지하고, 그 결과에 따라 물리적 반응(튕겨 나감, 멈춤)이나 이벤트(On Hit, On Overlap)를 발생시킵니다.
콜리전이 필요한 이유
- 물리적 상호작용: 캐릭터가 벽에 부딪혀 멈추거나, 총알이 오브젝트에 맞아 튕겨 나가거나 파괴되는 등의 물리적 반응을 구현합니다.
- 게임플레이 로직: 플레이어가 특정 아이템을 획득하거나, 적이 특정 영역에 진입했을 때 이벤트를 발생시키는 등의 상호작용 로직을 구현합니다.
- 성능 최적화: 복잡한 실제 메시 대신 단순한 콜리전 메시를 사용하여 충돌 계산의 오버헤드를 줄입니다.
콜리전 설정의 세 가지 주요 단계
언리얼 엔진에서 콜리전을 설정하는 방법은 크게 세 가지 계층으로 나뉩니다.
콜리전 프리셋
가장 쉽고 빠르게 콜리전 특성을 설정하는 방법입니다. 언리얼 엔진은 자주 사용되는 콜리전 조합을 미리 정의해둔 프리셋을 제공합니다.
컴포넌트 선택: 콜리전을 설정할 Primitive Component
(예: Static Mesh Component
, Capsule Component
, Box Component
등)를 선택합니다.
디테일(Details)
패널 > 콜리전(Collision)
섹션:
Collision Presets
: 드롭다운 메뉴를 클릭합니다.- 주요 프리셋
No Collision
: 어떤 충돌도 감지하지 않습니다. 유령처럼 모든 것을 통과합니다.OverlapAll
: 모든 것을 통과하지만, 모든 것에 대한 오버랩 이벤트를 발생시킵니다. (트리거 볼륨)BlockAll
: 모든 것을 막고, 충돌 시 물리적 반응을 일으킵니다.PhysicsActor
: 물리 시뮬레이션이 적용될 오브젝트에 사용됩니다. (중력, 힘 등에 반응)Pawn
/CharacterMesh
/Vehicle
등: 캐릭터나 차량 등 특정 종류의 오브젝트에 대한 표준 설정입니다.
- 활용: 대부분의 경우, 이 프리셋들을 활용하여 빠르게 콜리전 설정을 할 수 있습니다.
콜리전 채널 및 응답
프리셋만으로는 부족할 때, 각 오브젝트가 어떤 종류의 오브젝트와 상호작용할지 세밀하게 제어할 수 있습니다.
Collision Presets
> Custom...
선택: Custom
옵션을 선택하면 상세한 콜리전 설정을 직접 할 수 있습니다.
Object Type
: 해당 컴포넌트가 어떤 '종류'의 오브젝트인지를 정의합니다.
- 기본 제공:
WorldStatic
(움직이지 않는 월드),WorldDynamic
(움직이는 월드 오브젝트),Pawn
,PhysicsBody
,Vehicle
,Destructible
등. - 사용자 정의 채널 추가:
편집(Edit)
>프로젝트 세팅(Project Settings)
>엔진(Engine)
>콜리전(Collision)
으로 이동하여New Object Channel
을 추가할 수 있습니다. (예:Projectile
,Explosion
,Collectible
)Default Response
를 설정하여 해당 채널이 기본적으로 어떻게 반응할지 정합니다.
Trace Responses
: 이 컴포넌트가 Trace
(라인 트레이스, 박스 트레이스 등)에 어떻게 반응할지 정의합니다.
Ignore
(무시),Overlap
(겹침 감지),Block
(막힘 감지)
Object Responses
: 다른 Object Type
들과 어떻게 상호작용할지 정의합니다.
- 각
Object Type
에 대해Ignore
,Overlap
,Block
중 하나를 선택합니다. - 예시
- 플레이어 캐릭터의 콜리전은
Pawn
채널에Block
으로 응답해야 합니다. - 총알은
Projectile
채널이며,WorldStatic
은Block
하고,Pawn
은Overlap
하여 데미지를 주되 통과할 수 있도록 설정할 수 있습니다. - 아이템은
Collectible
채널이며,Pawn
에Overlap
하여 획득 이벤트를 발생시킵니다.
- 플레이어 캐릭터의 콜리전은
콜리전 메시 타입
스태틱 메시의 경우, Static Mesh Editor
에서 콜리전 메시의 형태를 설정할 수 있습니다. 이는 시각적 메시의 복잡도와 물리 시뮬레이션의 정확도, 성능에 영향을 미칩니다.
스태틱 메시 에셋 더블클릭: 콘텐츠 브라우저
에서 스태틱 메시 에셋을 더블클릭하여 스태틱 메시 에디터를 엽니다.
콜리전(Collision)
메뉴
Add Box/Sphere/Capsule Simplified Collision
: 가장 간단한 형태의 기본 도형 콜리전을 추가합니다. 성능에 가장 좋습니다.Add K-DOP X/Y/Z Simplified Collision
: 여러 개의 경사면을 가진 단순화된 콜리전을 생성합니다. (더 정확하지만 여전히 최적화됨)Auto Convex Collision
: 메시의 형태를 따라가는 볼록 콜리전을 자동으로 생성합니다. (가장 정확하지만 성능 부하가 있을 수 있음)Complex Collision as Simple
: 실제 스태틱 메시의 모든 삼각형을 콜리전으로 사용합니다. 가장 정확하지만 성능에 가장 큰 부하를 줍니다. 물리 시뮬레이션에는 거의 사용되지 않고,Trace
(특히 정확한 픽셀 단위 트레이스)에 주로 사용됩니다.콜리전 복잡도(Collision Complexity)
드롭다운에서Use Complex as Simple
을 선택합니다.
Collision
> Show Simple Collision
: 체크하여 현재 설정된 콜리전 메시를 시각적으로 확인합니다.
콜리전 이벤트 처리
콜리전이 감지되면 언리얼 엔진은 특정 이벤트를 발생시켜 블루프린트에서 로직을 구현할 수 있도록 합니다.
On Hit
이벤트 (Block 응답 시)
오브젝트가 다른 오브젝트에 Block
으로 응답하는 콜리전이 발생했을 때 트리거됩니다. 주로 물리적 충돌과 관련된 로직에 사용됩니다.
-
설정: 컴포넌트를 선택하고
디테일(Details)
패널의콜리전(Collision)
섹션에서Generate Hit Events
를 체크합니다. -
이벤트 그래프: 컴포넌트를 선택한 상태에서
디테일
패널 하단의이벤트(Events)
섹션에서On Component Hit
이벤트 옆의+
버튼을 클릭합니다. -
주요 핀
Other Comp
: 충돌한 상대 컴포넌트Normal Impulse
: 충돌 지점에서 가해진 충격량 벡터 (물리적 반응 계산에 유용)Hit Location
: 충돌이 발생한 월드 위치Hit Normal
: 충돌 지점의 표면 법선 벡터
-
활용 예시
- 총알이 벽에 맞으면 파편 이펙트와 사운드 재생.
- 캐릭터가 낙하 후 땅에 부딪혔을 때 착지 애니메이션 재생.
- 파괴 가능한 오브젝트가 충분한 힘으로 충돌했을 때 파괴.
On Overlap
이벤트 (Overlap 응답 시)
오브젝트가 다른 오브젝트에 Overlap
으로 응답하는 콜리전이 발생했을 때 트리거됩니다. 주로 트리거 영역, 아이템 줍기 등 물리적 충돌 없이 상호작용만 필요한 경우에 사용됩니다.
-
설정: 컴포넌트를 선택하고
디테일
패널의콜리전
섹션에서Collision Presets
를OverlapAll
등으로 설정하거나,Custom
설정에서 원하는Object Type
에Overlap
응답을 설정합니다. -
이벤트 그래프: 컴포넌트를 선택한 상태에서
디테일
패널 하단의이벤트
섹션에서On Component Begin Overlap
(겹치기 시작할 때)와On Component End Overlap
(겹치기 끝날 때) 이벤트 옆의+
버튼을 클릭합니다. -
주요 핀
Other Actor
: 겹친 상대 액터Other Comp
: 겹친 상대 컴포넌트
-
활용 예시
- 플레이어가 체력 포션에 닿으면 획득하고 포션 액터 파괴.
- 플레이어가 특정 영역에 진입하면 퀘스트 목표 업데이트.
- AI가 경계 구역에 들어오면 경고 상태로 전환.
트레이스 (Trace): 콜리전 쿼리
Trace
(라인 트레이스, 박스 트레이스, 스피어 트레이스 등)는 특정 지점에서 특정 방향으로 선이나 모양을 발사하여 중간에 콜리전이 있는지 검사하는 방법입니다. 물리 시뮬레이션 없이도 충돌 감지를 할 수 있어 매우 유용합니다.
Line Trace By Channel
: 한 지점에서 다른 지점까지 선을 긋고, 중간에 특정 콜리전 채널에 Block 또는 Overlap하는 오브젝트가 있는지 확인합니다. (예: 총알의 명중 판정, 시야 검사)Multi Line Trace By Channel
: 여러 개의 히트 결과를 반환합니다.Box Trace By Channel
/Sphere Trace By Channel
/Capsule Trace By Channel
: 선 대신 특정 모양을 사용하여 트레이스합니다. (예: 근접 공격의 범위 판정)
활용 예시
- 총알 판정: 총구에서 발사된 라인 트레이스가 적 캐릭터를 Block하면 데미지를 적용.
- 캐릭터 시야: AI의 눈에서 플레이어까지 라인 트레이스를 발사하여 시야가 가려지는지 확인.
- 상호작용 검사: 플레이어의 전방에 라인 트레이스를 발사하여 상호작용 가능한 오브젝트(문, 스위치)를 감지.
디버깅 콜리전
P
키: 게임 플레이 중 내비메시를 토글하지만, 간혹 콜리전 문제와 헷갈릴 수 있습니다.~
(콘솔) >pxvis collision
: 실행 중인 게임에서 모든 콜리전 메시를 시각적으로 표시합니다.~
(콘솔) >show collision
: 에디터 뷰포트에서 선택된 오브젝트의 콜리전 메시를 표시합니다.- 트레이스 디버그 옵션:
Line Trace
등의 노드에Draw Debug Type
핀을For Duration
이나For One Frame
으로 설정하여 트레이스 라인을 시각적으로 확인합니다.
콜리전 시스템은 게임플레이의 상호작용을 구현하는 데 있어 가장 기본적인 도구입니다. 콜리전 프리셋, 채널, 응답, 그리고 이벤트 처리 방법을 정확히 이해하고 활용하는 것이 안정적이고 직관적인 게임플레이를 만드는 데 매우 중요합니다.
이번 절에서는 언리얼 엔진에서 오브젝트 간의 충돌을 정의하고 감지하는 콜리전 시스템의 설정 방법과 On Hit
, On Overlap
이벤트를 통한 게임플레이 로직 연동, 그리고 Trace
기능을 활용한 충돌 쿼리에 대해 알아보았습니다. 콜리전은 물리 시뮬레이션과 더불어 게임의 상호작용을 구현하는 핵심 요소입니다.