기본 물리 엔진 설정
이전 장에서 레벨의 시각적 완성도를 높이는 조명, 그림자, 날씨, 시간 시스템에 대해 알아보았습니다. 이제 레벨에 현실적인 상호작용과 동적인 움직임을 부여하는 핵심 요소, 바로 물리 엔진(Physics Engine) 설정에 대해 배울 차례입니다. 언리얼 엔진은 강력한 물리 엔진을 내장하고 있어, 오브젝트들이 중력의 영향을 받거나, 서로 충돌하고, 힘에 의해 움직이는 등 실제 세계와 유사한 반응을 보이도록 만들 수 있습니다. '나 혼자 언리얼 기본' 교재를 통해 여러분이 언리얼 엔진의 물리 엔진을 이해하고, 이를 활용하여 더욱 생동감 있고 반응적인 게임 세계를 창조할 수 있도록 안내해 드리겠습니다. 마치 현실 세계의 모든 물체가 물리 법칙에 따르듯, 여러분의 레벨도 물리적인 상호작용을 통해 살아 숨 쉬게 만들어 봅시다.
물리 엔진의 중요성
물리 엔진은 게임의 현실감과 플레이어 경험에 깊은 영향을 미칩니다.
- 현실적인 상호작용: 오브젝트가 중력에 의해 떨어지고, 충돌 시 튕겨 나가거나 부서지는 등 실제와 유사한 반응을 보여 몰입감을 높입니다.
- 게임 플레이 다양성: 물리 기반의 퍼즐, 파괴 가능한 환경, 차량 시뮬레이션 등 다양한 게임 플레이 요소를 구현할 수 있습니다.
- 예측 불가능성 및 재플레이 가치: 물리 시뮬레이션은 매번 약간씩 다른 결과를 만들어내어 게임 플레이에 예측 불가능한 재미와 재플레이 가치를 더합니다.
- 애니메이션 대체: 복잡한 수동 애니메이션 대신 물리 시뮬레이션을 사용하여 자연스러운 움직임을 구현할 수 있습니다.
물리 엔진의 기본 개념 및 설정
언리얼 엔진의 물리 엔진은 액터의 컴포넌트(Component) 와 프로젝트 설정(Project Settings) 에서 다양한 방식으로 제어됩니다.
스태틱 메시 액터의 물리 설정
레벨에 배치된 대부분의 오브젝트는 Static Mesh Actor
입니다. 이 액터들이 물리적인 상호작용을 하도록 설정하는 것이 중요합니다.
액터 선택: 레벨에서 물리 상호작용을 할 스태틱 메시 액터를 선택합니다.
디테일 패널 (Details Panel)
- Physics (물리) 섹션
Simulate Physics (물리 시뮬레이션)
: 이 옵션을 활성화하면 액터가 물리 엔진의 영향을 받아 중력에 의해 떨어지거나, 다른 오브젝트와 충돌 시 반응하며 움직입니다. (예: 상자가 굴러떨어짐)Mass (질량)
: 액터의 질량을 설정합니다. 질량이 클수록 외부 힘에 덜 반응하고, 다른 오브젝트에 더 큰 영향을 줍니다. (단위: kg)Enable Gravity (중력 활성화)
: 물리 시뮬레이션이 활성화된 상태에서 중력의 영향을 받을지 설정합니다. (기본적으로 활성화)Linear Damping (선형 감쇠)
: 액터의 선형(직선) 운동에 저항하는 정도를 설정합니다. 값이 높을수록 빠르게 멈춥니다.Angular Damping (각 감쇠)
: 액터의 각(회전) 운동에 저항하는 정도를 설정합니다. 값이 높을수록 빠르게 회전을 멈춥니다.Use CCD (Continuous Collision Detection)
: 고속으로 움직이는 오브젝트가 다른 오브젝트를 뚫고 지나가는 현상(터널링)을 방지하는 고급 충돌 감지 기능입니다. 성능 비용이 있으므로 꼭 필요한 경우에만 활성화합니다.
- Collision (충돌) 섹션
Collision Presets (충돌 프리셋)
: 액터가 다른 오브젝트와 어떻게 충돌할지 미리 정의된 설정입니다. (자세한 내용은 다음 절에서 다룸)Generate Hit Events (히트 이벤트 생성)
: 이 액터가 다른 액터와 충돌했을 때 블루프린트에서OnComponentHit
이벤트를 발생시킬지 설정합니다. (예: 오브젝트가 땅에 닿았을 때 소리 재생)Generate Overlap Events (오버랩 이벤트 생성)
: 이 액터가 다른 액터와 겹쳤을 때 블루프린트에서OnComponentBeginOverlap
/OnComponentEndOverlap
이벤트를 발생시킬지 설정합니다. (예: 플레이어가 특정 영역에 진입했을 때 문이 열림)
스켈레탈 메시 액터의 물리 설정
Skeletal Mesh Actor
(캐릭터, 애니메이션이 적용된 오브젝트)는 스태틱 메시와는 다른 방식으로 물리 시뮬레이션을 적용합니다.
- PhysX (피직스) 에셋: 스켈레탈 메시에는
Physics Asset
이라는 별도의 에셋이 연결되어 있습니다. 이 에셋은 스켈레톤의 각 뼈대(Bone)에 대한 충돌 바디(Collision Body)와 조인트(Joint)를 정의합니다. - Ragdoll (래그돌): 캐릭터가 죽거나 특정 상황에서 물리 시뮬레이션이 활성화되어 뼈대가 축 늘어지는(래그돌) 효과를 구현할 때 사용합니다.
- 활성화: 스켈레탈 메시 컴포넌트의 디테일 패널에서
Physics
섹션의Simulate Physics
를 활성화하고,Physics Asset
을 지정합니다.
- 활성화: 스켈레탈 메시 컴포넌트의 디테일 패널에서
물리 머티리얼 (Physical Material)
- 역할: 오브젝트의 표면 특성(마찰, 반발력 등)을 정의하여 물리 상호작용에 영향을 줍니다. (예: 얼음은 마찰이 적고, 고무는 반발력이 높음)
- 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭
물리(Physics) > 물리 머티리얼(Physical Material)
을 선택합니다. - 주요 설정
Friction (마찰)
: 오브젝트가 다른 표면 위에서 미끄러지는 정도를 조절합니다.Restitution (반발력)
: 오브젝트가 충돌 시 튕겨 나가는 정도를 조절합니다. (0.0은 튕기지 않음, 1.0은 완벽하게 튕김)
- 적용
- 스태틱 메시: 스태틱 메시 에디터에서
Details
패널의Physics
섹션에 있는Simple Physical Material
에 물리 머티리얼을 할당합니다. - 머티리얼: 일반 머티리얼 에디터에서
Details
패널의Physics Material
에 물리 머티리얼을 할당합니다. (이 방식이 더 일반적)
- 스태틱 메시: 스태틱 메시 에디터에서
프로젝트 물리 설정 (Project Settings)
프로젝트 전체의 물리 엔진 동작을 제어하는 전역 설정입니다.
편집(Edit) > 프로젝트 세팅(Project Settings)
으로 이동합니다.
엔진(Engine) > 물리(Physics)
섹션을 선택합니다.
일반 물리 설정
Default Gravity Z (기본 중력 Z)
: 월드의 기본 중력 강도를 설정합니다. (기본값 -980.0 cm/s²). 이 값을 변경하여 달이나 다른 행성의 중력을 시뮬레이션할 수 있습니다.Max Physics Delta Time (최대 물리 델타 시간)
: 물리 시뮬레이션이 한 프레임에 사용할 수 있는 최대 시간을 제한합니다. 프레임 속도가 낮아질 때 물리 시뮬레이션이 너무 느려지는 것을 방지합니다.Default Terminal Velocity (기본 종단 속도)
: 오브젝트가 중력에 의해 떨어질 때 도달할 수 있는 최대 속도를 제한합니다.Default Phys Material (기본 물리 머티리얼)
: 물리 머티리얼이 지정되지 않은 모든 오브젝트에 적용될 기본 물리 머티리얼을 설정합니다.
물리 시뮬레이션 스텝
Enable Substepping (서브스텝 활성화)
: 물리 시뮬레이션을 여러 개의 작은 스텝으로 나누어 계산할지 설정합니다.- 장점: 고속으로 움직이는 오브젝트 간의 충돌 정확도를 높이고, 물리 시뮬레이션의 안정성을 향상시킵니다.
- 단점: 성능 비용이 증가할 수 있습니다.
Max Substep Delta Time (최대 서브스텝 델타 시간)
: 각 서브스텝의 최대 시간을 설정합니다.Max Substeps (최대 서브스텝 수)
: 한 프레임당 최대 서브스텝 수를 설정합니다.
물리 시뮬레이션 실습
간단한 레벨에서 물리 엔진 설정을 직접 적용해 봅시다.
새로운 레벨 생성: '파일(File) > 새 레벨(New Level) > 기본(Basic)'을 선택하여 기본적인 레벨을 만듭니다.
스태틱 메시 배치: 레벨에 몇 개의 Cube
스태틱 메시를 배치합니다.
물리 시뮬레이션 활성화
- 배치된
Cube
중 하나를 선택하고 디테일 패널의Physics
섹션에서Simulate Physics
를 활성화합니다. - '플레이(Play)' 버튼을 눌러 게임을 실행하면, 해당 큐브가 중력에 의해 떨어지는 것을 볼 수 있습니다.
질량 및 감쇠 조절
Simulate Physics
가 활성화된 큐브의Mass
값을 크게(예: 1000.0) 또는 작게(예: 0.1) 조절해보고,Linear Damping
과Angular Damping
도 조절하여 큐브의 움직임 변화를 관찰합니다.
물리 머티리얼 적용
- 콘텐츠 브라우저에서 새로운
Physical Material
을 생성합니다. (예:PM_Rubber
) PM_Rubber
의Restitution
값을 높게(예: 0.8) 설정합니다.- 레벨에
Cube
를 하나 더 배치하고, 이 큐브의Static Mesh
에셋을 더블클릭하여 스태틱 메시 에디터를 엽니다. - 디테일 패널의
Physics
섹션에서Simple Physical Material
에PM_Rubber
를 할당합니다. - 이 큐브도
Simulate Physics
를 활성화하고, 다른 큐브나 바닥에 떨어뜨려PM_Rubber
가 적용된 큐브가 더 잘 튕기는지 확인합니다.
프로젝트 중력 변경
편집(Edit) > 프로젝트 세팅(Project Settings) > 물리(Physics)
로 이동합니다.Default Gravity Z
값을-100.0
(낮은 중력) 또는-2000.0
(높은 중력)으로 변경해보고, 게임을 다시 플레이하여 오브젝트가 떨어지는 속도 변화를 관찰합니다.
기본 물리 엔진 설정은 레벨에 생명력을 불어넣고 플레이어에게 현실적인 상호작용 경험을 제공하는 첫걸음입니다. 이 절에서 배운 Simulate Physics
, Mass
, Damping
등의 액터별 설정과 Physical Material
, 그리고 Project Settings
의 전역 물리 설정을 이해하고 직접 적용해 보세요. 다음 절에서는 오브젝트 간의 상호작용을 제어하는 핵심 요소인 충돌(Collision) 설정에 대해 자세히 알아보겠습니다. 준비되셨나요?