본문으로 건너뛰기

안동민 개발노트

본문 시작

물리 시뮬레이션 기본 제어

컴포넌트의 물리 시뮬레이션과 질량·재질을 설정하고 힘과 토크를 적용해 강체 움직임을 제어합니다.

지금까지 캐릭터 애니메이션, UI, AI, 게임플레이 프레임워크 등 게임의 핵심 요소를 다뤘습니다.

이번에는 게임 세계의 현실감과 몰입감을 높이는 물리(Physics)를 살펴봅니다.

언리얼 엔진은 강력한 물리 엔진을 내장하고 있어 오브젝트 충돌, 중력, 힘 적용 같은 현상을 손쉽게 시뮬레이션할 수 있습니다.

이번 장에서는 물리 시뮬레이션 기본 개념과, 액터/컴포넌트 수준에서 물리 동작을 제어하는 방법을 정리합니다.

컴포넌트 단위 물리 제어

중력, 충돌, 힘, 질량은 Static Mesh 같은 Primitive Component 설정에서 실제 동작으로 이어진다.

  1. Simulate

    물리 시뮬레이션을 켜면 위치와 회전을 엔진이 계산한다.

  2. Collision

    충돌 프리셋과 Hit 이벤트로 반응 대상을 정한다.

  3. Mass

    질량과 감쇠 값이 힘에 대한 반응을 바꾼다.

  4. Material

    마찰과 반발력으로 표면 느낌을 만든다.


물리 시뮬레이션이란 무엇인가?

물리 시뮬레이션(Physics Simulation)은 게임 내의 오브젝트들이 현실 세계의 물리 법칙(중력, 질량, 마찰, 충돌 등)에 따라 상호작용하도록 만드는 과정입니다.

이는 단순히 정해진 애니메이션을 재생하는 것을 넘어, 예측 불가능하고 동적인 상호작용을 가능하게 하여 게임 세계에 생동감을 부여합니다.

물리 시뮬레이션이 필요한 이유
  • 현실감 및 몰입감: 오브젝트들이 물리적으로 반응하면 게임 세계가 더욱 현실적이고 설득력 있게 느껴집니다. (예: 총에 맞은 적이 쓰러지는 방식, 폭발로 인해 오브젝트가 흩어지는 모습)
  • 게임플레이의 동적 변화: 미리 정의되지 않은 상호작용을 통해 매번 다른 게임플레이 경험을 제공합니다. (예: 특정 오브젝트를 밀어서 길을 막거나 새로운 경로를 만드는 퍼즐)
  • 제작 효율성: 모든 물리적 반응을 수동으로 애니메이션하거나 스크립팅할 필요 없이, 물리 엔진이 자동으로 처리해주므로 개발 시간을 절약할 수 있습니다.
  • 예측 불가능성 및 재미: 물리 기반의 상호작용은 때때로 예상치 못한 재미있는 상황을 만들어냅니다.

언리얼 엔진의 물리 엔진

언리얼 엔진의 물리 백엔드는 버전에 따라 다릅니다.

UE4 계열은 주로 NVIDIA의 PhysX를 사용했고, UE5 계열은 Chaos Physics가 기본입니다.

강체(Rigid Body), 충돌, 제약, 파괴, 천 시뮬레이션 같은 물리 기능을 다룰 때는 현재 프로젝트의 엔진 버전과 물리 백엔드를 먼저 확인해야 합니다.


액터 및 컴포넌트의 물리 시뮬레이션 제어

Physics Simulation Blueprint 제어망

물리 활성화는 단순 체크박스가 아니라 충돌, 질량, 재질, 힘 적용 시점을 함께 맞춰야 안정적입니다.

  1. 컴포넌트 선택

    물리를 받을 Static Mesh 또는 Primitive Component를 명확히 고릅니다. Target

  2. 충돌 준비

    Block/Overlap 응답과 Simple Collision 구성이 실제 형상과 맞는지 봅니다. Collision

  3. 물성 설정

    질량, 감쇠, 물리 재질을 게임 감각에 맞게 조정합니다. Mass

  4. 힘 적용

    Impulse와 Force를 목적에 맞게 나누고 Tick 남용을 피합니다. Control

  5. 콜리전 형상

    눈에 보이는 메시와 실제 충돌 형상이 크게 어긋나지 않아야 합니다.

  6. 과도한 힘

    큰 Impulse 값이 터널링이나 튐을 만들지 않는지 확인합니다.

  7. 프레임 의존성

    낮은 프레임에서도 물리 결과가 플레이를 깨지 않는지 봅니다.

물리 시뮬레이션 설정 기준

Simulate Physics만 켜면 끝이 아니라 충돌 프리셋, 질량, 물리 재질, Force/Torque 적용 위치를 같이 봐야 한다.

  1. 활성화

    Static Mesh 컴포넌트에서 Simulate Physics를 켜 물리 계산 대상으로 만든다.

  2. 질량과 재질

    Mass와 Physical Material이 무게감, 마찰, 반발 정도를 바꾼다.

  3. 힘 적용

    Add Force와 Add Torque는 방향, 크기, 적용 지점에 따라 전혀 다른 움직임을 만든다.

  4. 시뮬레이션을 켠다

    Primitive Component에서 Simulate Physics를 활성화한다.

  5. 충돌을 맞춘다

    Collision Preset과 Hit 이벤트 조건을 확인한다.

  6. 힘을 적용한다

    Add Force, Add Impulse, Add Torque로 반응을 준다.

  7. 동작을 확인한다

    Mass, 감쇠, 디버그 표시로 결과를 검증한다.

언리얼 엔진에서 물리 시뮬레이션은 주로 Primitive Component (스태틱 메시, 스켈레탈 메시, 캡슐 콜리전 등) 수준에서 제어됩니다.

액터 자체는 물리 시뮬레이션을 직접 수행하지 않고, 포함된 컴포넌트가 물리적 특성을 가집니다.

물리 시뮬레이션 활성화/비활성화

가장 기본적인 제어는 특정 컴포넌트의 물리 시뮬레이션 활성화 여부입니다.

액터 블루프린트 열기: 물리 시뮬레이션을 적용하고 싶은 액터 블루프린트 (예: BP_PhysicsCube, BP_DestructibleWall)를 엽니다.

물리 컴포넌트 선택: 디테일(Details) 패널에서 물리 시뮬레이션을 적용할 Static Mesh Component 또는 다른 Primitive Component를 선택합니다.

Physics 섹션
  • Simulate Physics: 이 체크박스를 체크하면 해당 컴포넌트가 물리 시뮬레이션의 영향을 받기 시작합니다. (중력의 영향, 다른 물리 오브젝트와의 충돌 등)
  • 주의: Simulate Physics가 활성화되면, 해당 컴포넌트의 트랜스폼(위치, 회전)은 엔진의 물리 계산에 의해 결정됩니다. 따라서 블루프린트에서 직접 Set Relative Location 같은 노드를 사용하여 위치를 강제로 변경하면 물리 시뮬레이션과 충돌하여 부자연스러운 결과를 초래할 수 있습니다.

Simulation Generates Hit Events: 물리 충돌에서 On Hit을 받으려면 보통 이 옵션과 Blocking 충돌 응답이 함께 필요합니다.

Overlap 이벤트는 별도로 Generate Overlap Events와 Overlap 응답을 맞춰야 합니다. (다음 절에서 다룸)

예시
  • 떨어지는 상자: Static Mesh ComponentSimulate Physics를 체크하고, Collision PresetsBlock All 또는 PhysicsActor로 설정합니다.
  • 문이 부딪혀 열리는 효과: 문의 Static Mesh Component에 물리 시뮬레이션을 적용하고, 외부 힘에 반응하도록 합니다.

질량 및 물리 특성

오브젝트의 질량, 감쇠, 표면 재질은 물리 시뮬레이션에 큰 영향을 미칩니다.

감쇠는 속도와 회전에 대한 저항이고, 표면 마찰은 Physical Material의 Friction으로 다룹니다.

컴포넌트 선택: Simulate Physics가 활성화된 컴포넌트를 선택합니다.

Physics 섹션
  • Mass in Kg: 오브젝트의 질량을 킬로그램 단위로 확인합니다. 질량이 클수록 같은 힘이나 임펄스에 덜 반응합니다.
    • Mass Scale: 계산된 질량을 배율로 조정합니다.
    • Set Mass Override in Kg / Override Mass 계열: 필요한 경우 질량을 직접 지정합니다.
  • Linear Damping: 직선 속도를 줄이는 저항입니다. 값이 높을수록 이동 속도가 더 빨리 줄어듭니다.
  • Angular Damping: 회전 속도를 줄이는 저항입니다. 값이 높을수록 회전이 더 빨리 멈춥니다.
  • Enable Gravity: 이 컴포넌트에 중력을 적용할지 여부를 설정합니다. (체크 해제 시 중력의 영향을 받지 않음)

물리적 재질

오브젝트 표면의 마찰력(Friction)과 반발력(Restitution)을 정의하여 충돌 및 슬라이딩 반응을 제어합니다.

물리 재질 에셋 생성
  • 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 > 물리(Physics) > 물리 재질(Physics Material)을 선택합니다.
  • 이름을 지정합니다. (예: PM_Ice, PM_Rubber)

물리 재질 설정: PM_Ice 같은 Physical Material 에셋을 열고 디테일 패널에서 다음을 설정합니다.

  • Friction: 표면의 마찰 계수 (높을수록 마찰이 강해 잘 미끄러지지 않음)
    • 프로젝트와 버전에 따라 Friction Combine Mode로 다른 재질과의 결합 방식을 조정할 수 있습니다.
  • Restitution: 오브젝트가 다른 오브젝트와 충돌할 때의 반발 계수 (높을수록 더 많이 튕겨 나감)
  • Density: 물질의 밀도 (질량 계산에 사용될 수 있음)
스태틱 메시에 물리 재질 적용
  • 물리 시뮬레이션을 적용할 Static Mesh Component를 선택합니다.
  • 디테일 패널의 Physics 섹션에서 Physics Material 드롭다운에 생성한 물리 재질 에셋을 연결합니다.
  • Static Mesh 에셋 자체의 Physics Material 슬롯에도 적용할 수 있습니다.

힘 및 토크 적용

블루프린트에서 물리 시뮬레이션 중인 오브젝트에 직접 힘을 가하여 움직임을 제어할 수 있습니다.

  • Add Force: 지정된 방향으로 지속적인 힘을 가합니다. 힘이 유지되어야 하는 동안 반복적으로 호출하는 용도입니다. (예: 바람, 제트 추진)
    • Target: 힘을 가할 Primitive Component
    • Force: 힘의 벡터 (방향과 크기)
    • Bone Name: 스켈레탈 메시의 특정 본에 힘을 가할 경우 지정합니다.
  • Add Impulse: 특정 순간에 한 번의 충격량을 가합니다. (예: 폭발, 총격)
    • Target: 힘을 가할 Primitive Component
    • Impulse: 충격량 벡터
  • Add Torque: 오브젝트를 회전시키는 힘(토크)을 가합니다. (예: 회전하는 바퀴)
    • Target: 토크를 가할 Primitive Component
    • Torque: 토크 벡터
활용 예시
  • 총알이 적에게 맞았을 때: Bullet 액터의 On Hit 이벤트에서 적 캐릭터의 Skeletal Mesh ComponentAdd Impulse를 적용하여 쓰러지거나 뒤로 밀려나게 합니다.
  • 차량이 언덕을 오를 때: 바퀴 컴포넌트에 Add Force를 적용하여 구동력을 시뮬레이션합니다.

아래 점검표는 물리 시뮬레이션을 켜는 순간부터 충돌과 이벤트 반응까지 함께 확인해야 할 항목을 한 흐름으로 정리한 것입니다.

힘을 넣기 전에 바디와 이벤트 조건을 먼저 잠근다

물리 노드는 단독으로 보지 않고 시뮬레이션 상태, 콜리전, 힘의 성격, 이벤트 반응을 한 흐름으로 점검한다.

  1. 시뮬레이션 켜짐 Simulate Physics

    Mobility 상태를 먼저 본다.

  2. 컴포넌트 선택 힘

    받을 실제 Primitive를 지정한다.

  3. 힘 유형 결정 지속 힘, 순간 충격, 회전 토크

    구분한다.

  4. 충돌 응답 확인 채널

    이벤트 생성 조건을 맞춘다.

  5. 시각 디버그 Collision 표시

    물리 통계를 같이 본다.

노드쓰는 순간틀어지면 보이는 징후
Add Force바람, 추진, 지속 가속처럼 매 프레임 누적되는 힘Tick 호출 누락이나 질량 차이 때문에 반응이 약해 보임
Add Impulse폭발, 총격, 점프처럼 한 번에 전달되는 충격량충격이 과하거나 너무 작아 래그돌 반응이 어색함
Add Torque바퀴, 회전 장치, 축 기반 회전을 물리로 만들 때축 방향이 맞지 않아 기대와 다른 방향으로 회전함

디버깅 물리 시뮬레이션

  • Show Collision / Collision 시각화: 게임 플레이 중 콜리전 형상과 응답이 의도와 맞는지 확인합니다.
  • Chaos Visual Debugger: UE5 Chaos 프로젝트에서는 물리 바디, 제약, 충돌 이벤트를 추적하는 데 활용합니다.
  • PhysX 시각화 명령: UE4/PhysX 프로젝트에서는 pxvis collision, pxvis joints, pxvis bodies 같은 명령을 사용할 수 있습니다. UE5 Chaos 문맥에서는 그대로 적용되지 않을 수 있습니다.
  • ~ (콘솔) > stat physics: 물리 엔진의 성능 통계를 표시합니다.

물리 시뮬레이션 사용 시 고려사항

  • 성능: 너무 많은 오브젝트에 복잡한 물리 시뮬레이션을 적용하면 성능 저하의 원인이 될 수 있습니다. 필요한 경우에만 물리 시뮬레이션을 활성화하고, 단순화된 콜리전 메시를 사용하며, Sleep 기능을 활용합니다.
  • 결정론적이지 않음: 물리 시뮬레이션은 기본적으로 결정론적이지 않습니다. 즉, 동일한 초기 조건에서도 미세한 차이로 인해 매번 다른 결과가 나올 수 있습니다. 이는 특히 멀티플레이어 게임에서 동기화 문제를 일으킬 수 있으므로, 핵심 게임플레이 로직은 서버에서만 처리해야 합니다.
  • 콜리전 설정: 오브젝트 간의 상호작용은 콜리전 채널 및 프리셋 설정에 따라 크게 달라집니다. (다음 절에서 다룸)
  • 애니메이션과의 조화: 캐릭터의 이동과 같이 애니메이션과 물리 시뮬레이션이 모두 사용되는 경우, 둘 간의 자연스러운 전환과 조화가 중요합니다. (예: 걷다가 총에 맞아 래그돌로 전환)
힘을 주는 방식은 원하는 반응 시간으로 선택한다

Add Force, Add Impulse, Add Torque는 모두 물리 컴포넌트에 작용하지만 움직임의 목적과 지속 시간이 다릅니다.

  1. Use
    계속 밀거나 당기는 힘

    Add Force 바람, 추진, 자기장처럼 여러 프레임 동안 누적되는 힘에 적합합니다. Use Tick 또는 지속 입력에서 방향과 크기를 갱신합니다.

  2. Use
    한 순간 강하게 튀는 반응

    Add Impulse 폭발, 총격, 밀치기처럼 즉시 속도를 바꾸는 이벤트에 어울립니다. Use On Hit나 입력 이벤트에서 한 번만 호출합니다.

  3. 점검
    회전을 만들거나 유지하는 힘

    Add Torque 바퀴, 회전문, 굴러가는 오브젝트처럼 각속도 제어가 필요할 때 씁니다. 점검 Angular Damping이 너무 높으면 회전이 빠르게 사라집니다.

물리 시뮬레이션은 충돌, 중력, 힘 적용을 통해 플레이어와 오브젝트의 상호작용을 처리하는 기능입니다.

기본적인 물리 제어 방법을 이해하고 적절히 활용하는 것이 중요합니다.

마지막으로 물리 컴포넌트를 켤 때 함께 확인할 설정과 실패 징후를 한 번 더 묶어 봅니다.

물리는 컴포넌트, 충돌, 힘을 함께 검토한다

Simulate Physics만 켜면 끝이 아닙니다. Primitive Component의 콜리전과 질량, 감쇠, 이벤트 발생 조건까지 같은 흐름에서 확인해야 합니다.

  1. Component

    Static Mesh나 Skeletal Mesh처럼 실제 물리를 받을 Primitive Component를 고릅니다.

  2. Collision

    Block, Query And Physics, Generate Hit Events가 의도한 이벤트와 맞는지 봅니다.

  3. Force

    지속 힘은 Add Force, 순간 반응은 Add Impulse, 회전은 Add Torque로 나눕니다.

  4. Debug

    pxvis collision, stat physics, Hit 이벤트 핀으로 실제 충돌과 비용을 확인합니다.

  5. 멈춤
    움직이지 않음

    멈춤 Simulate Physics와 Collision Enabled가 동시에 맞는지 확인합니다.

  6. 과하게 반응

    튐 Mass, Damping, Impulse 크기와 물리 재질의 반발력을 낮춰 봅니다.

  7. 누락
    이벤트 없음

    누락 Generate Hit Events와 양쪽 콜리전 응답이 Block인지 먼저 봅니다.


이번 절에서는 언리얼 엔진에서 물리 시뮬레이션을 활성화하고, 오브젝트의 질량, 마찰력, 반발력 등을 제어하며, 블루프린트에서 힘을 가하는 기본적인 방법에 대해 알아보았습니다.

Simulate Physics 적용 전후 검증

물리는 메시, 콜리전, 질량, 힘 입력이 함께 맞아야 안정적으로 동작합니다.

  1. Collision
  2. 대상 기준

    대상 Simulate Physics를 켤 컴포넌트가 실제 충돌 가능한 Primitive인지 확인합니다.

  3. 응답 기준

    응답 Collision Enabled와 Hit 이벤트 조건이 의도한 충돌 방식과 맞는지 봅니다.

  4. 입력 기준

    입력 위치 직접 변경보다 Add Force, Add Impulse, Torque를 우선 적용합니다.