물리 기반 조정 (중력, 충돌)
중력과 충돌은 물리 시스템에서 가장 먼저 체감되는 설정입니다.
값 하나만 잘못 잡아도 캐릭터가 떠다니거나, 오브젝트가 벽을 뚫거나, 전투 감각이 쉽게 무너질 수 있습니다.
이번 절에서는 중력(Gravity)과 충돌(Collision)을 프로젝트 전역 설정과 액터 개별 설정으로 나눠 조정하는 방법을 다룹니다. Block / Overlap / Ignore를 언제 선택해야 하는지, 고속 이동에서 터널링을 줄이려면 어떤 옵션을 써야 하는지도 함께 정리하겠습니다.
이 절을 마치면 물리 반응을 감이 아니라 기준으로 튜닝할 수 있습니다.
중력 (Gravity)의 이해와 조정
중력은 모든 물리 시뮬레이션의 기본이며, 오브젝트가 자연스럽게 아래로 떨어지도록 만듭니다. 언리얼 엔진은 프로젝트 전체에 적용되는 기본 중력 외에도, 특정 액터의 중력을 개별적으로 제어할 수 있는 유연성을 제공합니다.
프로젝트 기본 중력 조정
- 위치:
편집(Edit) > 프로젝트 세팅(Project Settings) > 엔진(Engine) > 물리(Physics) - 설정:
Default Gravity Z (기본 중력 Z)- 기본값:
-980.0(cm/s²). 이는 지구의 표준 중력과 거의 유사합니다. -
조정
- 값을 낮추면 (절댓값 기준, 예:
-100.0): 오브젝트가 더 천천히 떨어지며, 마치 달이나 우주 환경처럼 느껴집니다. 점프 높이가 높아지고 이동이 부드러워집니다. - 값을 높이면 (절댓값 기준, 예:
-2000.0): 오브젝트가 더 빠르게 떨어지며, 높은 중력의 행성처럼 느껴집니다. 점프가 어려워지고 움직임이 둔해집니다.
- 값을 낮추면 (절댓값 기준, 예:
- 활용: 게임의 전체적인 분위기나 특정 레벨의 테마(예: 저중력 행성)를 설정할 때 사용합니다.
- 기본값:
액터별 중력 활성화/비활성화 및 배율 조정
- 액터 선택: 레벨에 있는 물리 시뮬레이션이 활성화된
Static Mesh Actor또는Skeletal Mesh Actor선택 -
디테일 패널 > Physics (물리) 섹션
Enable Gravity (중력 활성화): 이 옵션을 비활성화하면 해당 액터는 물리 시뮬레이션이 활성화되어 있어도 중력의 영향을 받지 않고 공중에 뜨거나, 외부 힘에 의해서만 움직입니다.- 활용: 우주선, 무중력 상태의 오브젝트, 또는 플레이어가 수동으로 움직이는 플랫폼 등에 사용합니다.
Gravity Scale (중력 배율): 특정 액터에만 적용되는 중력의 강도를 조절합니다. (기본값:1.0)- 조정:
0.5로 설정하면 프로젝트 기본 중력의 절반만 적용되고,2.0으로 설정하면 두 배의 중력이 적용됩니다. - 활용: 특정 구간에서 플레이어 점프력을 높이거나 낮출 때, 특정 오브젝트만 다르게 떨어지게 할 때 유용합니다.
- 조정:
충돌 (Collision)의 이해와 조정
물리 기반 조정 (중력, 충돌)에서 에디터 설정, 월드 상태, 실행 결과를 정리한 것입니다.
충돌은 오브젝트들이 서로 물리적으로 부딪히는 방식을 정의하며, 게임 플레이의 정확성과 현실성에 직접적인 영향을 미칩니다. 언리얼 엔진은 다양한 충돌 설정을 제공하여 세밀한 제어가 가능합니다.
충돌 프리셋 (Collision Presets)
- 역할: 오브젝트가 다른 오브젝트와 어떻게 상호작용할지 미리 정의된 규칙의 집합입니다.
- 위치:
Static Mesh Actor또는 다른 컴포넌트(예:Sphere Collision,Box Collision)의 디테일 패널 >Collision섹션 -
주요 프리셋
NoCollision (충돌 없음): 어떤 오브젝트와도 충돌하지 않고 뚫고 지나갑니다. (예: 배경 오브젝트, 시각 효과용 파티클)BlockAll (모두 차단): 모든 종류의 오브젝트를 물리적으로 차단합니다. (예: 벽, 바닥, 단단한 지형)OverlapAll (모두 오버랩): 모든 오브젝트와 겹침 이벤트(Overlap Event)를 발생시키지만, 물리적으로 차단하지는 않습니다. (예: 트리거 볼륨, 상호작용 가능한 영역)PhysicsActor: 물리 시뮬레이션이 활성화된 오브젝트에 적합한 프리셋입니다. 플레이어, 월드 다이내믹 등 대부분의 요소를 차단합니다.Pawn: 플레이어 캐릭터(Pawn)에 적합한 프리셋입니다.CharacterMesh: 플레이어 캐릭터의 스켈레탈 메시(몸)에 적합한 프리셋입니다.
- 활용: 대부분의 경우 이 미리 정의된 프리셋으로 충분합니다.
커스텀 충돌 설정 (Custom Collision)
- 필요성: 특정 오브젝트가 특정 종류의 오브젝트하고만 충돌하거나, 특정 종류의 오브젝트하고만 겹침 이벤트를 발생시키고 싶을 때 사용합니다.
- 설정 방법:
Collision Presets드롭다운에서Custom...을 선택합니다. -
채널 (Collision Channels)
Object Type (오브젝트 타입): 이 오브젝트가 어떤 종류인지 정의합니다. (예:WorldStatic,WorldDynamic,Pawn,PhysicsBody등)Response (반응): 이 오브젝트가 다른Object Type에 대해 어떤 반응을 보일지 정의합니다.Ignore (무시): 충돌하지 않고 뚫고 지나갑니다.Overlap (오버랩): 겹침 이벤트를 발생시키지만 물리적으로 차단하지는 않습니다.Block (차단): 물리적으로 막고 충돌 이벤트를 발생시킵니다.
-
활용 예시
- 총알:
Object Type을Projectile로 설정하고,Pawn은Block,WorldStatic은Block,PhysicsBody는Block,Pickup(아이템)은Overlap으로 설정할 수 있습니다. - 유령 캐릭터:
Object Type을Ghost로 설정하고, 모든 오브젝트 타입에 대해Overlap으로 설정하여 물리적으로 뚫고 지나가지만, 겹침 이벤트를 통해 상호작용은 가능하게 만들 수 있습니다.
- 총알:
커스텀 채널을 설계할 때는 Object Type별 반응과 이벤트를 함께 고정해 두면, 레벨마다 충돌 규칙이 어긋나는 문제를 줄일 수 있습니다.
충돌 메시 및 복잡도
-
Simple Collision (단순 충돌)
- 역할: 오브젝트의 외형을 단순화한 형태(상자, 구, 캡슐, 또는 Convex Hull)로 충돌을 계산합니다.
- 장점: 성능이 매우 효율적입니다. 대부분의 게임 오브젝트에 사용됩니다.
- 확인:
Static Mesh Editor에서 툴바의Collision메뉴를 통해Add Box/Sphere/Capsule Simplified Collision등을 추가하거나,Auto Convex Collision을 사용하여 자동으로 단순화된 충돌 메시를 생성할 수 있습니다.
-
Complex Collision (복잡 충돌)
- 역할: 메시의 실제 지오메트리(폴리곤)를 그대로 사용하여 충돌을 계산합니다.
- 장점: 매우 정확한 충돌을 제공합니다.
- 단점: 성능 부하가 매우 큽니다.
- 설정:
Static Mesh Editor의Details패널 >Collision섹션 >Collision Complexity를Use Complex as Simple로 설정합니다. - 활용: 아주 정밀한 충돌이 필요한 특정 상황(예: 복잡한 지형의 좁은 통로, 총알이 정확히 구멍에 들어가야 하는 경우)에만 제한적으로 사용합니다. 일반적으로 플레이어 캐릭터나 AI의 이동에는
Simple Collision만 사용해야 합니다.
Hit Events와 Overlap Events
-
Generate Hit Events (히트 이벤트 생성)Block반응이 발생하여 두 오브젝트가 물리적으로 부딪혔을 때 블루프린트에서OnComponentHit이벤트를 발생시킵니다.- 활용: 총알이 벽에 맞았을 때, 상자가 바닥에 떨어졌을 때, 차량이 다른 차량과 충돌했을 때 등.
-
Generate Overlap Events (오버랩 이벤트 생성)Overlap반응이 발생하여 두 오브젝트가 서로 겹쳤을 때 블루프린트에서OnComponentBeginOverlap,OnComponentEndOverlap이벤트를 발생시킵니다.- 활용: 플레이어가 트리거 영역에 진입했을 때, 아이템을 주웠을 때, 특정 지역에 들어서면 사운드가 재생될 때 등.
실습에 들어가기 전, 중력과 충돌 문제를 어떤 순서로 좁혀 볼지 아래 체크리스트로 정리해 둡니다.
물리 기반 조정 실습
간단한 예시를 통해 중력과 충돌 설정을 직접 조정해 봅시다.
새로운 레벨 생성: 파일(File) > 새 레벨(New Level) > 기본(Basic)을 선택합니다.
프로젝트 세팅(Project Settings) > 물리(Physics)로 이동하여Default Gravity Z값을-200.0으로 변경합니다.- 레벨에
Cube를 배치하고Simulate Physics를 활성화합니다. 게임을 플레이하여 큐브가 느리게 떨어지는 것을 확인합니다. - 또 다른
Cube를 배치하고Simulate Physics를 활성화한 뒤,Details패널의Physics섹션에서Gravity Scale을5.0으로 설정합니다. 게임을 플레이하여 이 큐브만 더 빠르게 떨어지는 것을 확인합니다.
- 레벨에
Cube를 하나 배치하고Collision Presets를OverlapAll로 변경합니다. (이때Simulate Physics는 비활성화된 상태가 더 좋습니다.) Generate Overlap Events를 활성화합니다.- 이 큐브 액터를 선택한 상태에서
Details패널 하단의Add Event버튼을 클릭하여OnComponentBeginOverlap이벤트를 추가합니다. - 이벤트 그래프에서
OnComponentBeginOverlap노드에Print String노드를 연결하고 Player Entered!와 같은 메시지를 입력합니다. - 게임 플레이 모드에서 플레이어 캐릭터로 해당 큐브를 뚫고 지나가면 화면에 메시지가 출력되는 것을 확인합니다.
- 팁: 큐브가 너무 작아 캐릭터가 잘 겹치지 않으면 큐브의 스케일을 키우거나,
Box Collision컴포넌트를 추가하여 충돌 볼륨만 키울 수 있습니다.
- 레벨에
SM_Chair와 같은 비교적 복잡한 스태틱 메시를 배치합니다. - 뷰포트 좌측 상단의
뷰 모드(View Mode)드롭다운 메뉴를 클릭합니다. Show > Collision을 선택하여 오브젝트의 충돌 메시를 시각적으로 확인합니다. 기본적으로 초록색 단순 충돌 메시가 보일 것입니다.- 해당 스태틱 메시 에셋을 더블클릭하여 스태틱 메시 에디터를 엽니다.
Details패널의Collision섹션에서Collision Complexity를Use Complex as Simple로 변경합니다. 다시 뷰포트로 돌아와Collision시각화를 확인하면 메시의 실제 폴리곤 모양으로 충돌 메시가 변한 것을 볼 수 있습니다. (성능에 유의하며 필요할 때만 사용)
물리 기반 조정은 중력, 충돌 프리셋, 커스텀 반응, 단순/복잡 충돌 메시를 나누어 설정하는 작업입니다. 게임플레이 요구와 성능 비용을 함께 확인해야 합니다.
중력과 충돌은 한 번에 모두 바꾸기보다 전역값, 액터별 예외, 반응 규칙, 충돌 복잡도를 차례로 좁히면 원인 추적이 쉬워집니다. 아래 표는 튜닝 순서를 한 번에 점검하도록 정리한 것입니다.
중력과 충돌을 튜닝할 때는 숫자부터 바꾸기보다 전역 규칙, 액터 예외, 채널 반응을 차례로 좁히는 편이 안전합니다.
물리 기반 조정 (중력, 충돌)은 작업 장면, 성능 영향, 적용 범위, 검증 기준으로 점검합니다.
물리 기반 조정 (중력, 충돌)에서 놓치기 쉬운 기준은 보충 점검 항목으로 다시 확인합니다.