물리 기반 조정 (중력, 충돌)
이전 절에서 언리얼 엔진 물리 엔진의 기본 설정과 오브젝트에 물리 시뮬레이션을 적용하는 방법을 배웠습니다. 이제 레벨의 물리적 상호작용을 더욱 정교하게 제어하기 위한 핵심 요소인 중력(Gravity) 과 충돌(Collision) 에 대해 깊이 있게 다룰 차례입니다. 오브젝트가 어떻게 떨어지고, 서로 부딪혔을 때 어떤 반응을 보일지는 게임 플레이의 핵심적인 부분이며, 현실감과 전략적 깊이를 더하는 데 매우 중요합니다. '나 혼자 언리얼 기본' 교재를 통해 여러분이 언리얼 엔진에서 중력과 충돌을 세밀하게 조정하여, 더욱 정확하고 예측 가능한 물리 환경을 창조할 수 있도록 안내해 드리겠습니다.
중력 (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
으로 설정하여 물리적으로 뚫고 지나가지만, 겹침 이벤트를 통해 상호작용은 가능하게 만들 수 있습니다.
- 총알:
충돌 메시 및 복잡도
- 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
시각화를 확인하면 메시의 실제 폴리곤 모양으로 충돌 메시가 변한 것을 볼 수 있습니다. (성능에 유의하며 필요할 때만 사용)
물리 기반 조정은 레벨에 생생한 물리적 상호작용을 부여하는 데 필수적입니다. 이 절에서 배운 중력의 전역/개별 조정, 충돌 프리셋 및 커스텀 설정, 그리고 단순/복잡 충돌 메시의 이해를 바탕으로 여러분의 게임 플레이에 적합한 물리 환경을 구축해 보세요.