icon
7장 : 물리 환경 설정

물리 기반 조정 (중력, 충돌)


이전 절에서 언리얼 엔진 물리 엔진의 기본 설정과 오브젝트에 물리 시뮬레이션을 적용하는 방법을 배웠습니다. 이제 레벨의 물리적 상호작용을 더욱 정교하게 제어하기 위한 핵심 요소인 중력(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 TypeProjectile로 설정하고, PawnBlock, WorldStaticBlock, PhysicsBodyBlock, Pickup (아이템)은 Overlap으로 설정할 수 있습니다.
      • 유령 캐릭터: Object TypeGhost로 설정하고, 모든 오브젝트 타입에 대해 Overlap으로 설정하여 물리적으로 뚫고 지나가지만, 겹침 이벤트를 통해 상호작용은 가능하게 만들 수 있습니다.

충돌 메시 및 복잡도

  • Simple Collision (단순 충돌):
    • 역할: 오브젝트의 외형을 단순화한 형태(상자, 구, 캡슐, 또는 Convex Hull)로 충돌을 계산합니다.
    • 장점: 성능이 매우 효율적입니다. 대부분의 게임 오브젝트에 사용됩니다.
    • 확인: Static Mesh Editor에서 툴바의 Collision 메뉴를 통해 Add Box/Sphere/Capsule Simplified Collision 등을 추가하거나, Auto Convex Collision을 사용하여 자동으로 단순화된 충돌 메시를 생성할 수 있습니다.
  • Complex Collision (복잡 충돌):
    • 역할: 메시의 실제 지오메트리(폴리곤)를 그대로 사용하여 충돌을 계산합니다.
    • 장점: 매우 정확한 충돌을 제공합니다.
    • 단점: 성능 부하가 매우 큽니다.
    • 설정: Static Mesh EditorDetails 패널 > Collision 섹션 > Collision ComplexityUse 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 Scale5.0으로 설정합니다. 게임을 플레이하여 이 큐브만 더 빠르게 떨어지는 것을 확인합니다.

충돌 프리셋 및 이벤트 실습

  • 레벨에 Cube를 하나 배치하고 Collision PresetsOverlapAll로 변경합니다. (이때 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 ComplexityUse Complex as Simple로 변경합니다. 다시 뷰포트로 돌아와 Collision 시각화를 확인하면 메시의 실제 폴리곤 모양으로 충돌 메시가 변한 것을 볼 수 있습니다. (성능에 유의하며 필요할 때만 사용)

물리 기반 조정은 레벨에 생생한 물리적 상호작용을 부여하는 데 필수적입니다. 이 절에서 배운 중력의 전역/개별 조정, 충돌 프리셋 및 커스텀 설정, 그리고 단순/복잡 충돌 메시의 이해를 바탕으로 여러분의 게임 플레이에 적합한 물리 환경을 구축해 보세요.