[UE5] 언리얼 엔진의 Collision 알아보기

연하·2024년 4월 15일
0

Unreal Engine Study

목록 보기
2/9
post-thumbnail

Collision Component

UE5에는 충돌에 영향을 받거나 영향을 줄 수 있는 두 가지 유형의 컴포넌트가 있다.

  • Mesh
  • Shape Object

Mesh

메시는 선과 꼭짓점으로 연결된 폴리곤 망이다. 최소 3개의 꼭짓점과 선으로 구성된 2D 모양이며, 큐브와 같은 단순한 모양에서부터 수천 개의 정점을 가지는 캐릭터에 이르기까지 복잡할 수 있다.

  • Static Mesh : 변하지 않는 메시
  • Skeletal Mesh : 스켈레톤을 가질 수 있으며 포즈를 변경할 수 있어 애니메이션이 가능한 메시를 의미한다.
  • Procedural Mesh : 특정 파라미터에 따라 자동으로 생성이 가능한 메시를 말한다.

Shape Object

단순한 메시로 표현되는 셰이프 오브젝트는 충돌 이벤트를 발생시키고 받는 충돌 물체로 동작하는 데 사용된다. 보이지 않는다.

  • Box Component
  • Sphere Component
  • Capsule Component

Mesh 컴포넌트와 Shape Object 컴포넌트는 Primitive 컴포넌트를 상속받는다. Primitive 컴포넌트는 지오메트리 및 충돌 기능을 제공하는 모든 컴포넌트의 기반이 된다.

Collision Event

Block

두 물체의 반응이 모두 Block으로 설정된 경우에만 Block이 발생한다. 두 물체에 대해 모두 OnHit 이벤트가 호출되며, 물리적으로 서로가 이동하는 경로를 막는다.

Overlap

두 물체는 서로를 막지도 않고 무시하지도 않으며 서로 겹친다. 두 물체 모두에서 GenerateOverlapEvents 속성이 true로 설정돼 있으면, 두 물체에서 OnBeginOverlap 이벤트와 OnEndOverlap 이벤트가 호출된다. 이 이벤트들은 각각 한 물체가 다른 물체와 겹치기 시작할 때종료할 때 호출된다. 두 물체 중 하나라도 GenerateOverlapEvents 속성이 true로 설정돼 있지 않으면 이 이벤트들은 호출되지 않는다.

Ignore

두 물체 중 하나가 다른 물체를 무시하면 두 물체는 서로 무시한다. 두 물체에 대해 아무런 이벤트도 호출되지 않으며, 두 물체는 서로가 없는 것처럼 동작하며 서로 겹친다.

물체 간 충돌에는 두 가지 측면이 있다.

  • Physics : 공이 중력에 영향을 받고 바닥과 벽에서 튀어 오르는 등 피직스 시뮬레이션과 관련된 모든 충돌
  • Query : 두 물체의 충돌과 관련된 이벤트가 게임에서 호출되며 추가 로직을 만드는데 활용할 수 있다(OnHit, OnBeginOverlap, OnEndOverlap 이벤트)

피직스를 기반으로 하는 물리적 반응은 한 물체가 피직스 시뮬레이션 중인 경우에만 적용된다. 예를 들어, 어떤 물체가 벽에 부딪히면 튕겨져 다른 방향으로 계속 이동한다.
쿼리를 기반으로 하는 물리적 반응은 피직스 시뮬레이션을 하고 있지 않은 모든 물체에 적용된다. 어떤 물체를 코드로 제어하는 경우에는 피직스 시뮬레이션을 사용하지 않고도 이동시킬 수 있다(SetActorLocation 함수나 Character Movement 컴포넌트 사용)

Object Channel

오브젝트 채널은 물체 충돌에 사용된다. 각 오브젝트 채널에 대한 '목적'을 지정하고, Block, Overlap, Ignore를 사용해 다른 오브젝트 타입에 대해 반응하는 방식을 지정할 수 있다. 개별 콜리전 채널에 대한 이 물체의 반응을 지정할 수 있는 Collision Presets를 보자.

Collision Enabled 옵션을 통해 이 물체에서 고려한 충돌 방식을 선택할 수 있다. 피직스 콜리전은 피직스를 시뮬레이션하는 다른 물체가 이 물체를 고려하는지의 여부와 관련이 있는 반면, 쿼리 콜리전은 충돌 이벤트와 다른 물체의 움직임을 막을지 여부를 결정하는 것과 관련 돼있다.

Object Type은 어떤 유형의 충돌 오브젝트인지를 나타낸다. UE5에서 기본 제공하는 Object Type 값은 다음과 같으며, 커스텀 오브젝트 타입도 만들 수 있다.

  • WorldStatic : 움직이지 않는 오브젝트
  • WorldDynamic : 움직일 수 있는 오브젝트
  • Pawn : 레벨에서 조종하고 움직일 수 있는 폰에 사용
  • PhysicsBody : 피직스를 시뮬레이션할 수 있는 오브젝트에 사용
  • Vehicle : 비히클 오브젝트에 사용
  • Destructible : 디스트럭터블 메시에 사용

Collision Presets

UE5에서 사용 가능한 콜리전 프리셋은 다음과 같다.

  • NoCollision : 어떤 방식으로도 충돌에 영향을 받지 않는 물체에 사용한다
    (ex) 플레이어가 닿을 수 없는 아주 먼 위치에 배치된 단순히 시각적인 용도의 물체
  • Block All : 위치가 고정돼 있고 다른 모든 물체를 막는 물체에 사용
    (ex) 바닥, 벽과 같이 플레이어 근처에 배치돼 있고 움직이지 않으며 플레이어의 움직임을 막는 물체
  • Overlap All : 위치가 고정돼 있고 다른 물체와 겹치는 물체에 사용
    (ex) 레벨에 배치돼 움직이지 않는 트리거 박스
  • Block All Dynamic : Block All 프리셋과 비슷하지만 게임플레이 중에 트랜스폼을 변경할 수 있는 움직이는 물체에 사용한다
  • Overlap All Dynamic : Overlap All 프리셋과 비슷하지만 게임플레이 중에 트랜스폼을 변경할 수 있는 움직이는 물체에 사용한다
  • Pawn : 폰과 캐릭터에 사용한다
    (ex) 플레이어 캐릭터와 플레이어가 아닌 다른 캐릭터
  • Physics Actor : 피직스를 시뮬레이션하는 물체에 사용한다
    (ex) 바닥과 벽에 부딪혀 튕기는 공과같이 피직스에 영향을 받는 물체

0개의 댓글