본문으로 건너뛰기

안동민 개발노트

본문 시작

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

전역·액터 중력을 조정하고 Block·Overlap·Ignore 충돌 응답과 고속 이동의 연속 충돌 검사를 설정합니다.

중력과 충돌은 물리 시스템에서 가장 먼저 체감되는 설정입니다.

값 하나만 잘못 잡아도 캐릭터가 떠다니거나, 오브젝트가 벽을 뚫거나, 전투 감각이 쉽게 무너질 수 있습니다.

이번 절에서는 중력(Gravity)충돌(Collision)을 프로젝트 전역 설정과 액터 개별 설정으로 나눠 조정하는 방법을 다룹니다.

Block / Overlap / Ignore를 언제 선택해야 하는지, 고속 이동에서 터널링을 줄이려면 어떤 옵션을 써야 하는지도 함께 정리하겠습니다.

이 절을 마치면 물리 반응을 감이 아니라 기준으로 튜닝할 수 있습니다.

중력과 충돌 조정 판정판

물리 반응은 먼저 전역 중력값을 고정하고, 액터별 예외와 충돌 반응을 나눈 뒤 PIE에서 실제 결과를 확인해야 흔들리지 않습니다.

  1. 자연 낙하

    정상 자연 낙하 전역값과 액터 배율이 맞고, 착지 후 튐이 과하지 않습니다.

  2. 관통

    위험 관통 Preset, 채널 반응, Collision Complexity를 순서대로 분리해 봅니다.

  3. 과한 튐

    주의 과한 튐 Physics Material의 Restitution과 질량 차이를 함께 확인합니다.

  4. 규칙 문서화

    고정 규칙 문서화 레벨별 예외를 표로 남기면 채널 규칙이 다시 어긋나지 않습니다.


중력 (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)의 이해와 조정

중력과 충돌 조정은 숫자를 바꾸는 것보다 어떤 액터가 어떤 규칙을 따르는지 구분하는 일이 먼저입니다.

아래 다이어그램은 전역값, 개별 설정, 테스트 순서를 보여줍니다.

충돌은 내 채널과 상대 채널의 반응 조합으로 결정된다

이벤트 설정만 바꾸기보다 Object Channel, Trace Channel, Response를 표처럼 읽어야 원인이 보인다.

반응의미대표 사용
Block서로 통과하지 못하고 이동이 막힌다.벽, 바닥, 닫힌 문, 단단한 장애물
Overlap통과는 허용하지만 Begin/End Overlap 이벤트가 발생한다.트리거 박스, 아이템 줍기, 지역 진입
Ignore충돌과 이벤트를 모두 무시한다.카메라 보조, 장식 채널, 불필요한 감지 제외
Preset자주 쓰는 채널 반응 묶음을 이름으로 저장한다.Pawn, Trigger, PhysicsActor 같은 반복 규칙

충돌은 오브젝트들이 서로 물리적으로 부딪히는 방식을 정의하며, 게임 플레이의 정확성과 현실성에 직접적인 영향을 미칩니다.

언리얼 엔진은 다양한 충돌 설정을 제공하여 세밀한 제어가 가능합니다.

충돌 프리셋 (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으로 설정하여 물리적으로 뚫고 지나가지만, 겹침 이벤트를 통해 상호작용은 가능하게 만들 수 있습니다.

커스텀 채널을 설계할 때는 Object Type별 반응과 이벤트를 함께 고정해 두면, 레벨마다 충돌 규칙이 어긋나는 문제를 줄일 수 있습니다.

충돌 메시 및 복잡도

  • 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

Hit와 Overlap 이벤트 판정 구조

Block, Overlap, Ignore 응답이 물리 충돌, 트리거 감지, 이벤트 호출로 어떻게 갈라지는지 비교한다.

  1. 채널 비교

    두 컴포넌트의 Object Type과 Collision Response가 서로 맞춰진다. channel

  2. 응답 결정

    둘 중 하나라도 Ignore면 무시되고, Overlap이면 트리거 이벤트가 가능하다. response

  3. 물리 접촉

    Block 조합에서는 이동이 막히고 조건에 따라 Hit Event가 발생한다. hit

  4. 트리거 처리

    Overlap 조합에서는 Begin/End Overlap으로 아이템 획득이나 영역 진입을 처리한다. overlap

  5. Generate Events

    Overlap 또는 Hit 이벤트 생성 옵션이 켜져 있는지 확인한다.

  6. 양쪽 설정

    한쪽만 맞지 않아도 기대한 이벤트가 발생하지 않을 수 있다.

  7. 디버그

    Collision Preset과 채널 응답을 PIE에서 시각적으로 확인한다.

  • Generate Hit Events (히트 이벤트 생성)
    • Block 반응이 발생하여 두 오브젝트가 물리적으로 부딪혔을 때 블루프린트에서 OnComponentHit 이벤트를 발생시킵니다.
    • 활용: 총알이 벽에 맞았을 때, 상자가 바닥에 떨어졌을 때, 차량이 다른 차량과 충돌했을 때 등.
  • Generate Overlap Events (오버랩 이벤트 생성)
    • Overlap 반응이 발생하여 두 오브젝트가 서로 겹쳤을 때 블루프린트에서 OnComponentBeginOverlap, OnComponentEndOverlap 이벤트를 발생시킵니다.
    • 활용: 플레이어가 트리거 영역에 진입했을 때, 아이템을 주웠을 때, 특정 지역에 들어서면 사운드가 재생될 때 등.

실습에 들어가기 전, 중력과 충돌 문제를 어떤 순서로 좁혀 볼지 아래 체크리스트로 정리해 둡니다.

중력과 충돌 문제는 전역값, 채널, 메시 복잡도, 고속 이동 순서로 좁힌다

물리 문제가 생기면 힘 값을 먼저 바꾸지 말고 어떤 조건에서 깨지는지 축을 분리한다.

  1. Gravity

    월드 중력과 개별 Gravity Scale을 확인한다.

  2. Channel

    Block, Overlap, Ignore 반응이 상대 채널과 맞는지 본다.

  3. Events

    Generate Overlap Events와 Hit 이벤트 조건을 확인한다.

  4. Collision Mesh

    Simple/Complex 충돌 형태와 캡슐 크기를 확인한다.

  5. Fast Motion

    CCD, Substep, 속도 제한이 필요한지 판단한다.

기준판정
겹치는데 이벤트 없음Overlap 반응과 Generate Overlap Events를 함께 확인한다.
빠른 물체가 통과함CCD와 Substep을 필요한 액터에만 좁혀 켠다.

물리 기반 조정 실습

간단한 예시를 통해 중력과 충돌 설정을 직접 조정해 봅시다.

새로운 레벨 생성: 파일(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 시각화를 확인하면 메시의 실제 폴리곤 모양으로 충돌 메시가 변한 것을 볼 수 있습니다. (성능에 유의하며 필요할 때만 사용)

물리 기반 조정은 중력, 충돌 프리셋, 커스텀 반응, 단순/복잡 충돌 메시를 나누어 설정하는 작업입니다.

게임플레이 요구와 성능 비용을 함께 확인해야 합니다.

중력과 충돌은 한 번에 모두 바꾸기보다 전역값, 액터별 예외, 반응 규칙, 충돌 복잡도를 차례로 좁히면 원인 추적이 쉬워집니다.

아래 표는 튜닝 순서를 한 번에 점검하도록 정리한 것입니다.

중력·충돌 튜닝 순서

물리 감각이 어색할 때는 큰 전역값보다 좁은 예외부터 확인해야 변경 범위를 통제할 수 있습니다.

  1. 1
    전역 중력 기준

    Default Gravity Z를 바꾸기 전 레벨 전체 점프와 낙하 감각을 기록합니다.

  2. 2
    액터별 예외

    Enable Gravity와 Gravity Scale로 특정 오브젝트만 다르게 떨어지게 합니다.

  3. 3
    반응 선택

    막아야 하면 Block, 감지만 하면 Overlap, 배경이면 Ignore를 고릅니다.

  4. 4
    채널 예외

    총알, 트리거, 아이템처럼 규칙이 다르면 Custom 채널로 분리합니다.

  5. 5
    복잡도 제한

    Simple Collision을 기본으로 두고 고속 물체에만 CCD를 검토합니다.

중력과 충돌을 튜닝할 때는 숫자부터 바꾸기보다 전역 규칙, 액터 예외, 채널 반응을 차례로 좁히는 편이 안전합니다.

중력과 충돌 조정 흐름

중력은 움직임의 기준을 만들고 충돌은 어떤 대상끼리 반응할지 결정합니다.

  1. Gravity Z
    Gravity Z

    프로젝트 기본 중력은 전체 낙하 속도와 점프 감각의 기준입니다.

  2. Actor Gravity
    Actor Gravity

    액터별 중력 사용 여부와 배율로 특수 오브젝트를 조정합니다.

  3. Preset
    Preset

    Block, Overlap, Ignore 조합을 프리셋으로 관리해 실수를 줄입니다.

  4. Complexity
    Complexity

    복잡한 메시 충돌은 필요한 경우에만 사용하고 단순 콜리전을 우선합니다.