# Collision Profile

## 개요

**Collision Profile(콜리전 프로파일)**&#xC740; 오브젝트의 충돌 속성을 세밀하게 정의하는 시스템입니다. 각 프로파일은 오브젝트가 어떤 **Collision Channel(콜리전 채널)** 에 속하는지, 다른 채널과 어떻게 상호작용하는지를 정의합니다. 이를 통해 복잡한 충돌 규칙을 체계적으로 관리할 수 있으며, 예를 들어 플레이어는 벽과 충돌하지만 투사체는 통과하도록 설정하는 등의 다양한 게임 상황을 구현할 수 있습니다.

OVERDARE Studio의 충돌 시스템은 **Collision Channel**과 **Collision Profile**로 구성됩니다. 각각의 역할과 관계를 이해하면 더욱 효과적으로 충돌 시스템을 설계할 수 있습니다.

## Collision System 구성 요소

### Collision Channel

Collision Channel(콜리전 채널)은 오브젝트의 그룹핑 또는 Raycast 등의 쿼리 필터링을 위해서 사용 됩니다

* Object Type의 채널인 경우

  * 이전의 Collision Group과 유사한 기능을 제공합니다.
  * Collision Group과 달리 각 채널 간의 상호작용 여부는 채널 자체에서 설정하지 않습니다.
  * 채널은 단순히 오브젝트를 그룹화하는 역할만 하며, 실제 충돌 관계는 **Collision Profile**에서 정의합니다.

  <figure><img src="/files/JTSBE4cPGAtPduAEfmEp" alt=""><figcaption></figcaption></figure>
* Trace Type 의 채널인 경우

  * RaycastSingleByChannel , SpherecastSingleByChannel 과 같은 쿼리에서 인자로 사용됩니다
  * 검출 대상 오브젝트의 Collision Profile 에 대한 감지 여부를 설정할 수 있습니다.

  <figure><img src="/files/tskfl3mZCtlPbRi3UirA" alt=""><figcaption></figcaption></figure>

#### Collision Channel 제한 사항

* Collision Channel은 총 **32개**까지 생성할 수 있으며, 그중 **18개**를 크리에이터가 직접 정의하여 사용할 수 있습니다.
* Collision Channel에는 **Trace Type 채널** 또는 **Object Type 채널**을 추가할 수 있습니다. 두 타입은 32개의 채널을 공유합니다.
  * Profile은 개수 제한이 없으므로, 추가 채널 없이도 충분히 기능 확장이 가능합니다.
  * 보통은 Object Type 채널은 추가 없이 Profile만 추가해도 충분한 편입니다.

### Collision Profile

**Collision Profile**(콜리전 프로파일)은 오브젝트의 콜리전 관련 속성을 종합적으로 정의하는 구조입니다. 언리얼 엔진의 Collision Preset 개념과 유사하며, 자주 사용되는 충돌 설정을 미리 정의하여 재사용할 수 있습니다.

각 프로파일은 다음 두 가지 항목을 정의합니다:

<figure><img src="/files/rkP4SenQuFPr1MRUGX9Y" alt=""><figcaption></figcaption></figure>

1. **오브젝트 타입(Object Type / Collision Channel) :**\
   해당 프로파일을 가진 오브젝트가 속하는 콜리전 채널
2. **다른 채널과의 충돌/인터랙션 허용 상태(Collision Response)**:\
   각 콜리전 채널과의 구체적인 상호작용 방식(충돌, 오버랩만, 무시 등)

예를 들어, "이 프로파일에 해당하는 오브젝트는 'Humanoid' 채널에 속하며, 'WorldStatic' 채널과는 충돌하고, 'Projectile' 채널과는 오버랩만 되며, 'Trigger' 채널과는 상호작용하지 않는다"와 같이 정의할 수 있습니다.

#### 기본 제공 Collision Profile

OVERDARE Studio는 자주 사용되는 충돌 설정을 미리 정의한 기본 프로파일을 제공합니다:

| **프로파일명**             | **Object Type** | **주요 용도**                    |
| --------------------- | --------------- | ---------------------------- |
| **NoCollision**       | WorldStatic     | 충돌이 필요 없는 오브젝트 (예: 이펙트, 파티클) |
| **BlockAll**          | WorldStatic     | 모든 채널과 충돌하는 오브젝트             |
| **OverlapAll**        | WorldStatic     | 모든 채널과 오버랩만 되는 오브젝트          |
| **BlockAllDynamic**   | WorldDynamic    | 동적 오브젝트용 전체 충돌               |
| **OverlapAllDynamic** | WorldDynamic    | 동적 오브젝트용 전체 오버랩              |

이러한 기본 프로파일을 활용하거나, 필요에 따라 커스텀 프로파일을 생성하여 사용할 수 있습니다.

## Collision Profile 사용 방법

### Collision Profile 패널 표시

Collision Profile은 OVERDARE Studio 최상단 탭 영역에서 **Model 탭**을 선택하면 출력되는 **Collision Profile 버튼**을 클릭하여 표시할 수 있습니다.

<figure><img src="/files/LJdVh1Pyj20wVwhpNKoz" alt=""><figcaption></figcaption></figure>

### Collision Channel 생성 및 관리

#### Collision Channel 추가

Collision Profile 창에서 **Collision Channel** 섹션의 Empty Channel의 이름을 바꾸어 새로운 채널로 사용할 수 있습니다.

{% hint style="info" %}
기본적으로 제공되는 Default Channel은 이름 변경 및 삭제가 불가합니다.채널 이름은 최대 50자까지 설정할 수 있습니다.
{% endhint %}

<figure><img src="/files/AUkOx2RUuKNYSLeGB2h9" alt=""><figcaption></figcaption></figure>

#### Collision Channel 관리

채널명 위에서 마우스 더블 클릭하여 채널명을 변경할 수 있으며, **Delete**를 통해 채널을 삭제할 수 있습니다.

{% hint style="info" %}
기존에 이미 존재하는 채널명으로는 변경이 불가합니다.채널을 삭제하면 해당 채널을 사용하는 프로파일이 영향을 받을 수 있으므로 주의가 필요합니다.
{% endhint %}

#### Collision Cannel 정보 수정

**ObjectType**

해당 채널을 오브젝트 타입으로 설정합니다. 해당 오브젝트 타입의 기본 Response를 설정합니다.

별 다른 Profile이 지정되지 않으면, 해당 오브젝트 타입은 모두 기본 Responce로 작동합니다.

**TraceType**

TraceType으로 지정하는 경우, 해당 TraceChannel이 CollisionProfile과 어떻게 반응 하는지 결정합니다.

예를 들어 TraceResponce로 Pawn을 Ignore 로 지정할 경우, 해당 채널을 이용해 Raycast를 할 때, Pawn Profile을 사용하는 Part, MeshPart는 검출되지 않습니다.

{% hint style="info" %}
**주요 사용사례**

CameraChannel에서 Wall CollisionProfile을 Ignore로 설정 하면, Wall Profile로 지정된 벽이 캐릭터와 카메라 사이에 있더라도, 카메라가 캐릭터를 볼 수 있도록 벽 앞으로 이동하지 않습니다.
{% endhint %}

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fln65WmRyxJsAO30XwBd2%2Fvideo_1280.mp4?alt=media&token=edda8dd1-71cf-43c1-9594-a7ea09806830>" %}

### Collision Profile 생성 및 관리

#### Collision Profile 추가

Collision Profile 창에서 **+ New Profile 버튼**을 클릭하여 새로운 프로파일을 생성할 수 있습니다. 생성 시 **New Profile**로 생성되며, 프로파일 이름을 변경하여 여러 프로파일을 생성하고 관리할 수 있습니다.

<figure><img src="/files/5gs24hQ6925b1q7KeSsY" alt=""><figcaption></figcaption></figure>

#### Collision Profile 설정

프로파일을 선택하면 우측 패널에서 다음 항목들을 설정할 수 있습니다:

**오브젝트 타입 설정**

**Object Type** 드롭다운 메뉴에서 해당 프로파일을 가진 오브젝트가 속할 **Collision Channel**을 선택합니다.

예를 들어, 플레이어 캐릭터용 프로파일이라면 "Player" 채널을 선택하고, 벽이나 바닥 같은 정적 오브젝트용 프로파일이라면 "WorldStatic" 채널을 선택할 수 있습니다.

**채널별 상호작용 설정**

**Collision Responses** 섹션에서 각 Collision Channel과의 구체적인 상호작용 방식을 설정할 수 있습니다.

각 채널에 대해 다음 옵션 중 하나를 선택할 수 있습니다:

| 옵션          | 설명                                             |
| ----------- | ---------------------------------------------- |
| **Block**   | 해당 채널의 오브젝트와 충돌합니다. 해당 채널이 Trace Type의 채널인 경우, |
| **Overlap** | 해당 채널의 오브젝트와 오버랩만 되며, 물리적 충돌은 발생하지 않습니다.       |
| **Ignore**  | 해당 채널의 오브젝트와 상호작용하지 않습니다.                      |

{% hint style="warning" %}
**Collision Response 우선순위**:&#x20;

Collision Response는 **Ignore > Overlap > Block** 순으로 우선순위가 높습니다. 두 오브젝트가 서로 다른 Response를 가진 경우, 더 높은 우선순위의 Response가 적용됩니다.- Block vs Overlap → Overlap으로 간주됩니다.

* Block vs Ignore → Ignore로 간주됩니다.
* 두 오브젝트 모두 Block으로 설정한 경우에만 충돌이 발생합니다.
  {% endhint %}

{% hint style="info" %}
**같은 채널 간 충돌 설정**: 같은 채널(예: Pawn ↔ Pawn)에 속한 오브젝트들 간의 충돌도 프로파일별로 다르게 설정할 수 있습니다. 예를 들어, RootPart 프로파일은 다른 Pawn과 Overlap으로 설정하고, BodyPart 프로파일은 다른 Pawn과 Block으로 설정하여, RootPart는 무시하고 BodyPart만 Hit하도록 설정할 수 있습니다.
{% endhint %}

<figure><img src="/files/Vp6DBZjHxe7wSkCrJ46K" alt=""><figcaption></figcaption></figure>

#### Collision Profile 관리

프로파일명 위에서 마우스 더블클릭하여프로파일명을 변경할 수 있으며, **Delete**를 통해 프로파일을 삭제할 수 있습니다.

{% hint style="info" %}
기본제공하는 프로파일명으로는 변경이 불가합니다. 프로파일을 삭제하면 해당 프로파일을 사용하는 오브젝트가 영향을 받을 수 있으므로 주의가 필요합니다.
{% endhint %}

&#x20;

### 오브젝트에 Collision Profile 적용

Collision Profile을 설정할 오브젝트(Part, MeshPart 등)를 선택한 후, 프로퍼티 창에서 **Collision Profile** 속성에 프로파일 이름을 입력하여 설정할 수 있습니다.

각 오브젝트는 **하나의** Collision Profile만 가질 수 있습니다.&#x20;

<figure><img src="/files/lrGYxw6gGpRQBi2Rjqvi" alt=""><figcaption></figcaption></figure>

## Collision Profile 활용 예시

### 예시 1: 플레이어와 투사체 시스템

플레이어 캐릭터는 벽과 충돌하지만, 투사체는 플레이어를 통과하고 벽에만 충돌하도록 설정할 수 있습니다.

1. **Collision Channel 생성**

* "Humanoid" 채널 생성 (또는 기본 제공 채널 사용)
* "Projectile" 채널 생성
* "WorldStatic" 채널 생성 (기본 제공, WorldStatic에서 변경됨)

2. **Collision Profile 생성**

**PlayerProfile**:

* Object Type: Humanoid
* Collision Response
  * WorldStatic: Block
  * Projectile: Overlap
  * Humanoid: Block

**ProjectileProfile**:

* Object Type: Projectile
* Collision Response
  * WorldStatic: Block
  * Humanoid: Overlap
  * Projectile: Ignore

3. **오브젝트에 프로파일 적용**

* 플레이어 캐릭터의 하위 Part들에 PlayerProfile 적용
* 투사체 오브젝트에 ProjectileProfile 적용
* 벽과 바닥 오브젝트에 WorldStatic 채널을 사용하는 프로파일 적용

### 예시 2: 트리거 영역 설정

특정 영역에 진입했을 때 이벤트를 발생시키는 트리거 영역을 만들 수 있습니다.

1. **Collision Channel 생성**

* "Trigger" 채널 생성 (또는 기본 제공 채널 사용)

2. **Collision Profile 생성**

**TriggerProfile**:

* Object Type: Trigger
* Collision Response
  * Humanoid: Overlap
  * WorldStatic: Ignore
  * Projectile: Ignore

3. **오브젝트에 프로파일 적용**

* 트리거 영역 Part에 TriggerProfile 적용
* `Touched` 이벤트를 사용하여 플레이어 진입 감지

### 예시 3: 기본 프로파일 활용

기본 제공 프로파일을 활용하여 빠르게 충돌 설정을 적용할 수 있습니다.

1. **NoCollision 프로파일**: 이펙트, 파티클 등 충돌이 필요 없는 오브젝트에 적용
2. **BlockAll 프로파일**: 모든 오브젝트와 충돌해야 하는 벽, 바닥 등에 적용
3. **OverlapAll 프로파일**: 모든 오브젝트와 오버랩만 되는 트리거 영역에 적용

필요에 따라 기본 프로파일을 복사하여 커스터마이징하거나, 새로운 프로파일을 생성할 수 있습니다.

## 기본 제공 Collision Channel

OVERDARE Studio는 게임 개발에 자주 사용되는 Collision Channel을 기본으로 제공합니다.

| **채널명**          | **설명**                                            | **용도**                     |
| ---------------- | ------------------------------------------------- | -------------------------- |
| **WorldStatic**  | <p>고정된 오브젝트<br>(Anchored, 물리 시뮬레이션 없음)</p>        | 맵에 고정된 바위, 펜스, 벽 등         |
| **WorldDynamic** | <p>동적 오브젝트<br>(!Anchored, 물리 시뮬레이션 있음)</p>        | 움직이는 플랫폼, 도어 등             |
| **PhysicsBody**  | <p>물리 시뮬레이션 오브젝트<br>(CanCollide && !Anchored)</p> | 물리적으로 시뮬레이션되고 충돌 처리되는 오브젝트 |
| **Pawn**         | 플레이어가 빙의 가능한 캐릭터                                  | 플레이어 캐릭터, NPC 등            |

## Trace Channel 활용

**Trace Channel**은 Raycast 등의 쿼리 작업에서 사용되는 채널입니다. `RaycastByChannel()` API에서 Trace Channel을 사용하면 프로파일별로 Overlap 또는 Hit 검출이 가능합니다.

### Trace Channel과 Object Type Channel의 관계

* Trace Channel과 Object Type Channel은 **32개의 채널을 공유**합니다.
* Trace Channel은 Raycast, LineTrace 등의 쿼리 작업에서 사용됩니다.
* Object Type Channel은 오브젝트의 충돌 그룹핑에 사용됩니다.
* 같은 채널을 Trace Channel과 Object Type Channel로 모두 사용할 수 있습니다.

### Trace Channel 사용 예시

특정 Trace Channel을 사용하여 Raycast를 수행하면, 해당 채널에 대한 프로파일의 Collision Response 설정에 따라 다음과 같이 검출됩니다:

* **Block**: Hit으로 검출됩니다. `RaycastResult`에서 `Hit` 속성이 `true`가 됩니다.
* **Overlap**: Overlap으로 검출됩니다. `RaycastResult`에서 `Hit` 속성이 `false`이고 `Overlap` 속성이 `true`가 됩니다.
* **Ignore**: 검출되지 않습니다.

예를 들어, "WeaponTrace"라는 Trace Channel을 생성하고, 플레이어 프로파일에서 WeaponTrace에 대해 Block으로 설정하면, 무기 Raycast 시 플레이어만 Hit으로 검출하고 다른 오브젝트는 무시할 수 있습니다.

### Collision Profile의 장점

**Collision Profile**은 **Collision Group**보다 더 세밀하고 유연한 충돌 제어를 제공합니다:

* **채널별 세밀한 제어**: 각 채널에 대해 Block, Overlap, Ignore를 개별적으로 설정할 수 있습니다.
* **프로파일 기반 예외 관리**: 예전처럼 그룹 간의 관계를 매번 정의할 필요 없이, 개별 프로파일의 독립성만으로 특정 상황(예: 투사체 관통 등)에 맞는 충돌 규칙을 효율적으로 적용할 수 있습니다
* **확장성**: 새로운 채널이나 프로파일을 추가하기 쉽고, 기존 설정에 영향을 주지 않습니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.overdare.com/korean/manual/studio-manual/game-development/collision-profile.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
