본문으로 건너뛰기

안동민 개발노트

본문 시작

기본 물리 엔진 설정

물리 시뮬레이션·충돌 이벤트·질량·댐핑의 기본 원리를 익히고 액터와 프로젝트에 물리 환경을 설정합니다.

조명과 날씨를 잘 구성해도 오브젝트가 아무 반응을 하지 않으면 레벨은 금방 인공적으로 보입니다.

문이 밀리고 상자가 넘어지고 물체가 충돌하는 순간부터 플레이어는 그 세계를 진짜로 받아들이기 시작합니다.

이번 절에서는 언리얼의 물리 엔진(Physics Engine)을 프로젝트에 안정적으로 적용하는 기본 설정을 다룹니다.

어떤 액터에 물리 시뮬레이션을 켜야 하는지, 충돌 이벤트는 어디서 받아야 하는지, 성능 비용은 어떻게 관리해야 하는지를 함께 정리하겠습니다.

학습을 마치면 레벨에 물리 상호작용을 넣을 때 필요한 최소 기준을 스스로 점검할 수 있습니다.


물리 엔진의 중요성

물리 엔진은 게임의 현실감과 플레이어 경험에 깊은 영향을 미칩니다.

  • 현실적인 상호작용: 오브젝트가 중력에 의해 떨어지고, 충돌 시 튕겨 나가거나 부서지는 등 실제와 유사한 반응을 보여 몰입감을 높입니다.
  • 게임 플레이 다양성: 물리 기반의 퍼즐, 파괴 가능한 환경, 차량 시뮬레이션 등 다양한 게임 플레이 요소를 구현할 수 있습니다.
  • 예측 불가능성 및 재플레이 가치: 물리 시뮬레이션은 초기 상태와 계산 조건에 따라 결과가 달라질 수 있어 게임 플레이에 예측 불가능한 재미와 재플레이 가치를 더합니다.
  • 애니메이션 대체: 복잡한 수동 애니메이션 대신 물리 시뮬레이션을 사용하여 자연스러운 움직임을 구현할 수 있습니다.

물리 엔진의 기본 개념 및 설정

물리 엔진 설정은 중력과 충돌이 레벨 전체에 어떤 규칙으로 적용되는지 이해하는 단계입니다.

언리얼 엔진의 물리 엔진은 액터의 컴포넌트(Component)와 프로젝트 설정(Project Settings)에서 다양한 방식으로 제어됩니다.

스태틱 메시 액터의 물리 설정

레벨에 배치된 대부분의 오브젝트는 Static Mesh Actor입니다.

움직일 메시 컴포넌트는 Movable로 두고 단순 충돌 형상을 준비합니다. 배경처럼 고정할 대상은 시뮬레이션을 켜지 않습니다. UE5의 기본 물리 시스템은 Chaos입니다.

액터 선택: 레벨에서 물리 상호작용을 할 스태틱 메시 액터를 선택합니다.

디테일 패널 (Details Panel)
  • Physics (물리) 섹션
    • Simulate Physics (물리 시뮬레이션): 이 옵션을 활성화하면 액터가 물리 엔진의 영향을 받아 중력에 의해 떨어지거나, 다른 오브젝트와 충돌 시 반응하며 움직입니다. (예: 상자가 굴러떨어짐)
    • Mass (질량): 액터의 질량을 설정합니다. 같은 힘에 대한 가속도는 질량이 클수록 작습니다. 질량은 형상·밀도로 계산되며 직접 지정할 때는 Override Mass를 사용합니다. (단위: kg)
    • Enable Gravity (중력 활성화): 물리 시뮬레이션이 활성화된 상태에서 중력의 영향을 받을지 설정합니다. (기본적으로 활성화)
    • Linear Damping (선형 감쇠): 액터의 선형(직선) 운동에 저항하는 정도를 설정합니다. 값이 높을수록 빠르게 멈춥니다.
    • Angular Damping (각 감쇠): 액터의 각(회전) 운동에 저항하는 정도를 설정합니다. 값이 높을수록 빠르게 회전을 멈춥니다.
    • Use CCD (Continuous Collision Detection): 고속으로 움직이는 오브젝트가 다른 오브젝트를 뚫고 지나가는 현상(터널링)을 줄이는 고급 충돌 감지 기능입니다. 성능 비용이 있으므로 꼭 필요한 경우에만 활성화합니다.
  • Collision (충돌) 섹션
    • Collision Presets (충돌 프리셋): 액터가 다른 오브젝트와 어떻게 충돌할지 미리 정의된 설정입니다. (자세한 내용은 다음 절에서 다룸)
    • Simulation Generates Hit Events: 물리 시뮬레이션의 blocking 충돌을 이 컴포넌트의 OnComponentHit로 받을 때 켭니다. 이동 sweep에서 발생하는 Hit와는 구분합니다. (예: 오브젝트가 땅에 닿았을 때 소리 재생)
    • Generate Overlap Events (오버랩 이벤트 생성): 양쪽 컴포넌트에서 활성화하고 query 충돌과 채널 응답도 맞춰야 OnComponentBeginOverlap / OnComponentEndOverlap을 받을 수 있습니다. (예: 플레이어가 특정 영역에 진입했을 때 문이 열림)

스켈레탈 메시 액터의 물리 설정

Skeletal Mesh Actor (캐릭터, 애니메이션이 적용된 오브젝트)는 스태틱 메시와는 다른 방식으로 물리 시뮬레이션을 적용합니다.

  • Physics Asset (물리 에셋): 스켈레탈 메시에는 Physics Asset이라는 별도의 에셋이 연결되어 있습니다. 이 에셋은 스켈레톤의 각 뼈대(Bone)에 대한 충돌 바디(Collision Body)와 조인트(Joint)를 정의합니다.
  • Ragdoll (래그돌): 캐릭터가 죽거나 특정 상황에서 물리 시뮬레이션이 활성화되어 뼈대가 축 늘어지는(래그돌) 효과를 구현할 때 사용합니다.
    • 활성화: 스켈레탈 메시 컴포넌트의 디테일 패널에서 Physics 섹션의 Simulate Physics를 활성화하고, Physics Asset을 지정합니다.

물리 머티리얼 (Physical Material)

  • 역할: 오브젝트의 표면 특성(마찰, 반발력 등)을 정의하여 물리 상호작용에 영향을 줍니다. (예: 얼음은 마찰이 적고, 고무는 반발력이 높음)
  • 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 물리(Physics) > 물리 머티리얼(Physical Material)을 선택합니다.
  • 주요 설정
    • Friction (마찰): 오브젝트가 다른 표면 위에서 미끄러지는 정도를 조절합니다.
    • Restitution (반발력): 오브젝트가 충돌 시 튕겨 나가는 정도를 조절합니다. (두 표면의 Combine Mode와 속도·해결 조건도 함께 적용)
  • 적용
    • 스태틱 메시: 스태틱 메시 에디터에서 Details 패널의 Physics 섹션에 있는 Simple Physical Material에 물리 머티리얼을 할당합니다.
    • 머티리얼: 일반 머티리얼의 Phys Material에 할당하면 주로 복잡 충돌에서 표면 정보를 읽을 때 사용됩니다. 단순 충돌은 메시의 Simple Physical Material 또는 컴포넌트 오버라이드를 확인합니다.

프로젝트 물리 설정 (Project Settings)

프로젝트 전체의 물리 엔진 동작을 제어하는 전역 설정입니다.

편집(Edit) > 프로젝트 세팅(Project Settings) 으로 이동합니다.

엔진(Engine) > 물리(Physics) 섹션을 선택합니다.

일반 물리 설정

  • Default Gravity Z (기본 중력 Z): 월드의 기본 중력 강도를 설정합니다. (기본값 -980.0 cm/s²). 이 값을 변경하여 달이나 다른 행성의 중력을 시뮬레이션할 수 있습니다.
  • Max Physics Delta Time (최대 물리 델타 시간): 한 스텝이 진행하는 시뮬레이션 시간의 상한입니다. CPU 작업 시간 예산이 아니며, 엔진 Tick보다 작게 제한하면 안정성을 위해 물리 진행이 느려질 수 있습니다.
  • Default Terminal Velocity (기본 종단 속도): 기본 Physics Volume에서 Character Movement를 쓰는 Pawn의 낙하 속도 한계에 사용됩니다. 모든 Chaos 강체의 공통 최고 속도는 아닙니다.
  • Default Phys Material (기본 물리 머티리얼): 물리 머티리얼이 지정되지 않은 모든 오브젝트에 적용될 기본 물리 머티리얼을 설정합니다.

물리 시뮬레이션 스텝

  • Enable Substepping (서브스텝 활성화): 물리 시뮬레이션을 여러 개의 작은 스텝으로 나누어 계산할지 설정합니다.
    • 장점: 고속으로 움직이는 오브젝트 간의 충돌 정확도를 높이고, 물리 시뮬레이션의 안정성을 향상시킵니다.
    • 단점: 성능 비용이 증가할 수 있습니다.
  • Max Substep Delta Time (최대 서브스텝 델타 시간): 각 서브스텝의 최대 시간을 설정합니다.
  • Max Substeps (최대 서브스텝 수): 한 프레임당 최대 서브스텝 수를 설정합니다.

물리 시뮬레이션 실습

간단한 레벨에서 물리 엔진 설정을 직접 적용해 봅시다.

새로운 레벨 생성: 파일(File) > 새 레벨(New Level) > 기본(Basic)을 선택하여 기본적인 레벨을 만듭니다.

스태틱 메시 배치: 레벨에 몇 개의 Cube 스태틱 메시를 배치합니다.

물리 시뮬레이션 활성화
  • 배치된 Cube 중 하나를 선택하고 디테일 패널의 Physics 섹션에서 Simulate Physics를 활성화합니다.
  • 플레이(Play) 버튼을 눌러 게임을 실행하면, 해당 큐브가 중력에 의해 떨어지는 것을 볼 수 있습니다.
질량 및 감쇠 조절
  • Simulate Physics가 활성화된 큐브에서 Override 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를 할당합니다.
  • 기본 Cube 에셋을 함께 쓰면 앞서 배치한 큐브에도 같은 에셋 설정이 적용됩니다. 개별 비교에는 컴포넌트의 Phys Material Override를 사용합니다.
  • 이 큐브도 Simulate Physics를 활성화하고, 같은 높이에서 바닥에 떨어뜨려 PM_Rubber가 적용된 큐브가 더 잘 튕기는지 확인합니다.
프로젝트 중력 변경
  • 편집(Edit) > 프로젝트 세팅(Project Settings) > 물리(Physics)로 이동합니다.
  • Default Gravity Z 값을 -100.0 (낮은 중력) 또는 -2000.0 (높은 중력)으로 변경해보고, 게임을 다시 플레이하여 오브젝트가 떨어지는 속도 변화를 관찰합니다.

기본 물리 엔진 설정은 레벨에 현실적인 상호작용을 넣는 첫걸음입니다.

Simulate Physics, Mass, Damping 같은 액터 단위 설정과 Physical Material, Project Settings의 전역 물리 옵션을 함께 조정해 보세요.

다음 절에서는 오브젝트 간 반응을 좌우하는 충돌(Collision) 설정을 더 깊게 다룹니다.