Unreal

19. Collision & Overlap (1)

Kelvin의 게임개발 2024. 1. 31. 00:01
728x90
반응형

1. Collision Presets

 

UE에서 Level에 배치할 수 있는 모든것은 Actor를 상속받아야 한다

 

그렇다면 StaticMesh uasset을 드래그해서 Level에 올리면 어떻게 될까? 바로 Static Mesh Actor가 Instance화 되고 해당 Actor는 StaticMeshComponent를 갖게 된다

StaticMeshActor는 Actor를 상속받고 StaticMeshComponent 한개를 가지고 있다

 

StaticMeshComponent에는 Collision이 존재한다 (MeshComponent들과 CollisionComponent에는 Collision이 존재한다)

 

StaticMeshActor들은 기본적으로 Collision Presets가 존재하고 여기서 원하는 Collision Preset 선택이 가능하다

 

SkeletalMeshComponent에도 마찬가지로 Collision이 존재하며 Default Collision Preset이 CharacterMesh로 되어있다

 

이때 Collision Presets을 Custom으로 두면 세부 사항을 직접 custom하여 사용이 가능하다, 하지만 기본적으로 존재하는 Collision Preset을 선택하면 세부사항은 변경이 불가능하다

 

Object Type : 다른 Object가 이 Object와 충돌했을 때 인식하는 Object Type을 의미한다 이때 충돌,겹치기,무시는 아래의 Responses에서 처리한다

ex) A Object의 Object Responses에서 Pawn은 Ignore로 되어 있고 WorldStatic은 Block으로 되어 있다 이때 A Object가 Pawn과 충돌하면 충돌이 무시되고 World Static Type과 충돌하면 Block되게 된다

 

 

WorldStatic 움직이지 않는 정적인 배경액터에 사용하는 콜리전 채널, 주로 스태틱 메시에 있는 스태틱 메시 컴포넌트에 사용

WorldDynamic 움직이는 액터에 사용하는 콜리전 채널, 블루 프린트에 속한 스태틱 메시 컴포넌트에 사용

Pawn 플레이어가 조종하는 물체에 주로 사용

Visibility 물체가 시각적으로 보이는지 탐지하는데 사용, 물건을 잡는 기능을 구현할때 사용 (LineTrace)

Camera 카메라와 목표물 간에 장애물이 있는지 탐지하는데 사용 (LineTrace)

PhysicsBody 물리시뮬레이션으로 움직이는 컴포넌트에 설정

Vehicle 자동차를 구성하는 채널

Destructive 물체가 파괴되는 것을 구현할때 사용

 

 

 

Collision Enabled : 여러가지 충돌 옵션을 선택할 수 있다

 

No Collision으로 지정하면 해당 Object는 충돌하지 않는다

 

Query Only로 하면 LineTrace, Overlap, Sweep과 같은 충돌은 허용한다 하지만 Physics Simulation을 할 수 없게 된다 (이 뜻은 물리적으로 충돌이 불가능하다는 점이 아니다)

 

UE에는 Chaos라는 물리 엔진이 존재하는데 이 Chaos로 컴포넌트가 Physics Simulation이 가능하다면 모든 종류의 물리 계산이 가능하다 ex) 서로 부딪힐 때 힘에 의해 밀려나거나 중력계산 등의 물리 계산이 가능하다

하지만 Query Only는 Physics Simulation이 불가능하기 때문에 이러한 물리 계산은 불가능하다

 

Physics Only로 하면 Physics Simulation만 가능하다 (LineTrace, Overlap, Sweep은 불가능), Physics->Simulate Physics를 True로 두면 Physics Simulation이 가능하다, Physics->Enable Gravity로 중력도 적용이 가능하다

하지만 공간 Query가 없기때문에 물리적 충돌은 불가능하다

 

Collision Enabled로 하면 충돌방식을 Query Only방식, Physics Only방식 둘 다 가능할 수 있게 한다 (LineTrace, Overlap, Physics Simulation이 다 가능하다 하지만 그 만큼 비용이 비싸다)

 

No Collision 시 충돌을 감지하지 않기 때문에 뚫고 들어가게 된다

 

Query Only 시 LineTrace 충돌을 감지하기 때문에 Foot IK에서 사용한 LineTrace가 충돌을 감지하여 IK가 작동하는 모습을 볼 수 있다

 

하지만 이 StaticMesh 자체에는 Collision이 존재하지 않기 때문에 아직까지는 Query Only, Collision Enabled를 해도 물리적인 충돌은 불가능하다

 

이러한 Mesh들은 상대적으로 다각형으로 구성되어 있기 때문에 Simple Collision이 아닌 Complex Collision으로 되어 있다

이렇게 수많은 Polygon으로 구성되어 있는 Complex Collision을 Query충돌에 사용한다면 비용이 상당히 크게 발생하게 된다

(이러한 Complex/Simple Collision은 Show Tab에서 확인이 가능하다)

 

따라서 상대적으로 간단한 Collision을 사용해야 한다

Add Sphere/Capsule/Box SImplified Collision으로 각각의 Shape에 맞는 Collision을 부착할 수 있다

 

Add 10DOP-X/Y/Z Simplified Collision은 각각의 축 방향으로 Cylinder형 Collision을 부착할 수 있다 이때 10의 의미는 이 Collision 모양을 쭉 펼치면 10개의 평평한 면이 생기기 때문에 10이 붙는다

(면이 많아질수록 더욱 정교한 Collision을 사용할 수 있지만 비용이 많이 들게 된다)

 

이렇게 Mesh에 Collision을 추가하면 물리적 충돌이 가능하게 된다 (Query Only, Collision Enable만 물리적 충돌 가능, PhysicsOnly는 공간 Query가 없기때문에 물리적 충돌은 불가능)

 

이때 Collision Enabled를 PhysicsOnly로 두고 Simulate Physics를 True하면 Physics Simulation이 되면서 암석이 밀리게 된다 (이때도 물리적 충돌은 일어나지 않음 -> Collision이 통과한다는 의미)

 

Console명령어 Show Collision으로 Collision Polygon을 시각화 할 수 있다

 

 

2. Overlap Events

 

ActorClass에는 Actor 와 Actor가 Overlap 시 발생하는 이벤트가 존재한다

Actor Begin Overlap : Actor와 다른 Actor가 Overlap시 발생하는 이벤트이다, Overlap한 다른 Actor를 AActor*로 반환한다

 

이 이벤트를 활성화 시키고 싶다면 원하는 Collision에서 Simulation Generates Hit Event를 True로 만들어야 한다

 

 

MeshComponent가 아닌 다른 Component에서도 충돌처리가 가능한데 이 Component가 바로 Collision Component이다

(Sphere/Box/Capsule의 모양이 있다)

이 노란색 구체 영역이 바로 Sphere Collision Component이다 원하는 만큼 Transform을 조작하여 충돌처리에 사용할 수 있다 (Collision Tab이 존재한다)

 

모든 Component들은 Rendering->Hidden In Game으로 게임 화면에서 보이게/안보이게 설정이 가능하다

 

보통 이러한 Collision Component는 Game상에서 안보이게 처리해서 Collision Trigger용으로만 사용한다

 

 

ActorOverlap이 아닌 Component Overlap Event도 따로 존재한다

On Component Begin Overlap : 해당 컴포넌트와 다른 Actor 혹은 Component가 Overlap될 때 발생하는 Event이다

 

겹친 본인 Component (UPrimitiveComponent*), 겹친 Actor (AActor*), 겹친 상대방 Component (UPrimitiveComponent*) 등을 반환한다

 

어떤 컴포넌트가 Overlap Event를 발생시키는지 ActorOverlap Event보다 더 정확하게 알 수 있다 따라서 Component의 Overlap Check 시 On Component Begin Overlap을 사용하길 권장한다

 

 

728x90
반응형

'Unreal' 카테고리의 다른 글

21. Collision & Overlap (2)  (79) 2024.02.08
20. Observer Pattern & Delegate  (80) 2024.02.07
18. IK (Inverse Kinematics)  (109) 2024.01.27
17. Jump Animation  (125) 2024.01.24
16. Anim Instance  (93) 2024.01.23