일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Factory method pattern
- 분포 기반 정렬 알고리즘
- 두 직선사이 교점
- 자료구조
- Set
- 비교 기반 정렬 알고리즘
- 디자인패턴
- flyweight pattern
- Trie
- BFS
- 동적 계획법
- 경량 패턴
- 정렬 알고리즘
- 트리
- 스택
- 팩토리패턴
- 유니온-파인드
- 외적
- 생성패턴
- Union-Find
- C++ STL 정리
- command pattern
- Queue
- Unreal Collision
- 명령패턴
- 트리순회
- Abstract Factory pattern
- 관찰자(Observer) 패턴
- object channel
- 깊이 우선 탐색
- Today
- Total
KimMK
Unreal Collision 본문
액터간의 충돌을 발생시키기 위해서는 충돌 영역을 지정해줘야 합니다.
그 충돌 영역을 "콜리전"이라고 합니다.
메시 형태 그대로를 충돌 영역으로 잡을 수 있지만, 이렇게 하면 CPU의 과부하가 발생할 가능성이 커집니다.
따라서, Unreal에서는 단순 콜리전 영역으로 Box, Sphere, Capsule 형태의 기본 콜리전 컴포넌트를 제공합니다.
Unreal 에디터에서 프로젝트 세팅 >> 콜리전 탭으로 가면 두 가지의 콜리전 채널을 볼 수 있는데
Object 채널은 Collision 간에 충돌을 체크할 때 사용하고 (액터간의 충돌을 확인할 때),
Trace 채널은 Unreal에서 제공하는 LineTrace와 같은 Ray Tracing 기능을 이용할 때 사용합니다.
1. Object 채널
두 충돌체끼리 충돌했을 때, 정해진 충돌 반응을 하는데 이를 Response라고 합니다.
Response에는 3가지 종류가 존재합니다.
Ignore | 충돌 이벤트를 무시함 |
Overlap | 충돌했다는 이벤트는 발생시키지만, 물리적으로 밀어내지 않음 |
Block | 충돌했다는 이벤트를 발생시키며 물리적으로 밀어냄 |
Response별 충돌 결과 |
||||
Ignore | VS | Ignore | = | Ignore |
Ignore | VS | Overlap | = | Ignore |
Ignore | VS | Block | = | Ignore |
Overlap | VS | Overlap | = | Overlap |
Overlap | VS | Block | = | Overlap |
Block | VS | Block | = | Block |
두 충돌체 간에 Overlap 이벤트를 발생시키려면, 콜리전 컴포넌트의 디테일 패널에서 Generate Overlap Events가 True로 체크되어 있어야 합니다.
Collision 설정에는 Collision Enabled 항목이 있는데, 이 옵션은 충돌 감지나 물리 작용 기능을 On/Off 할 때 사용합니다.
No Collision | 충돌 감지 기능과 물리 기능을 모두 사용하지 않는 상태 |
Query Only | 충돌 감지 기능(Overlap)만 사용하는 상태 |
Physics Only | 물리 작용 기능(Physics)만 사용하는 상태 |
Collision Enabled | 모두 사용하는 상태 |
콜리전 프리셋은 사용자가 설정한 내용을 저장해놓고 필요할 때 가져올 수 있습니다.
예를 들어, 플레이어와 적 케릭터 간의 충돌체는 서로에 대한 충돌을 Overlap까지만 갖고 다른 액터와는 무시를 싶을 때, 콜리전 프리셋에서 아래와 같이 설정할 수 있습니다.
오브젝트 타입을 커스텀해서 만들면,
프로젝트 폴더의 Config폴더에서 DefaultEngine.ini 파일에 순서대로 저장됩니다.
이를 C++에서 불러오려면 위의 ECC_GameTraceChannel 번호에 맞게 불러서 사용하시면 됩니다.
예를 들어서 콜리전 컴포넌트에 "Player" 오브젝트 채널을 주고 싶다면,
이와 같이 세팅해주시면 됩니다.
하지만, 이와 같이 세팅하면 다른 오브젝트 채널과 개별적으로 설정해줘야 하기 때문에 보통 Preset을 세팅하고 이를 바인딩하는 것이 일반적입니다.
따라서, SetCollisionProfileName 함수를 이용해 프리셋을 설정해줍니다.