SensorToolkit 2이란?
Sensor Toolkit2는 Raycasts, Overlaps 등의 기능을 활용하여 2D와 3D 환경에서 다양한 감지(Detection) 동작을 쉽게 구현할 수 있게 도와주는 에셋입니다.
센서(Sensor) 컴포넌트를 통해 복잡한 감지 및 AI 행동을 구현할 수 있으며, 성능 최적화가 잘 되어 있다는 것이 특징입니다. 다양한 필터링 옵션과 편집기 내 테스트 기능을 존재하여 빠르게 디버깅 및 테스트 할 수 있어 효율적으로 개발을 할 수 있습니다.
센서와 신호란?
Sensor Toolkit2에는 핵심 단어가 존재합니다. '센서', '신호'.
두 핵심 단어에 대해서 알아보겠습니다.
센서란?
특정 조건에 따라 객체를 감지할 수 있게 도와주는 컴포넌트 입니다. 센서에는 아래와 같은 종류들이 존재합니다.
- Ray Sensor: Ray를 사용하여 객체와의 교차점을 탐지합니다. 예를 들어, 떨어지는 캐릭터 아래의 지면을 감지할 수 있습니다.
- Range Sensor: 특정 범위 내에 있는 객체를 탐지합니다.
- Trigger Sensor: Trigger Collider와 교차하는 객체를 감지합니다. 게임 내 특정 구역에 들어오는 객체를 감지할 수 있습니다.
- Line of Sight(LOS) Sensor: 객체의 가시성을 계산하여 감지합니다. 캐릭터가 다른 캐릭터를 시야에 둘 때 사용됩니다.
신호란?
감지된 객체와 그 객체의 정보(예: 위치, 가시성)를 저장하는 데이터 구조입니다. 저장되는 데이터 구조는 아래와 같습니다.
- Object: 감지된 게임 오브젝트입니다.
- Strength: 감지 강도를 나타내며, 일반적으로 1로 설정됩니다.
- Shape: 객체의 형태를 나타내는 경계 상자입니다.
Sensor 종류에 대해 하나씩 알아보겠습니다.
Ray Sensor
Ray Sensor는 특정 방향으로 발사된 광선(ray)이 교차하는 객체를 감지하는 센서입니다. 이 센서는 Physics.Raycast 또는 Physics2D.Raycast 함수들을 사용하여 광선의 경로에 있는 모든 객체를 탐지합니다.
설정 항목 | 설명 | 현재 설정 |
Shape | 센서의 캐스팅 형태를 결정합니다. | Ray |
Length | 광선의 길이를 설정합니다. | 10 |
Direction | 광선의 발사 방향을 설정합니다. | X: 0, Y: 0, Z: 1 |
World Space | 월드 좌표계를 사용할지 로컬 좌표계를 사용할지 결정합니다. 체크 시 월드 좌표계를 사용합니다. | 비활성화 |
Ignore List | 감지에서 제외할 게임 오브젝트 목록을 설정합니다. | 없음 |
Enable Tag Filter | 특정 태그를 가진 객체만 감지하도록 설정합니다. | 비활성화 |
Detects On Layers | 감지할 물리 레이어를 설정합니다. | Nothing |
Detection Mode | 감지할 객체의 유형을 설정합니다. | Colliders |
Ignore Trigger Colliders | 트리거 콜라이더를 무시할지 여부를 설정합니다. | 비활성화 |
Signal Processors | 신호를 처리할 프로세서 수를 설정합니다. | 0 |
Minimum Slope Angle | 교차점의 최소 경사각을 설정하여 필터링할 수 있습니다. | 0 |
Obstructed By Layers | 광선을 차단할 물리 레이어를 설정합니다. | Nothing |
Pulse Mode | 센서가 감지 루틴을 실행하는 빈도를 설정합니다. | Each Frame |
Update Function | 센서의 업데이트가 이루어지는 시점을 설정합니다. | Update |
Events | 감지 이벤트를 설정할 수 있는 옵션입니다. | - |
Test | 현재 설정된 상태에서 센서를 테스트할 수 있는 기능입니다. | - |
예시: 떨어지는 캐릭터가 있을 때, Ray Sensor는 캐릭터 아래의 지면을 감지하여, 캐릭터가 지면에 닿기 전에 지면의 위치와 상태를 파악할 수 있게 합니다.
Range Sensor
Range Sensor는 특정 범위 내에 있는 객체를 감지하는 센서입니다. Overlap 함수들을 사용하여 탐지 영역 내의 객체들을 감지합니다.
설정 항목 | 설명 | 현재 설정 |
Shape | 센서의 감지 영역 형태를 결정합니다. | Sphere |
Radius | 감지 반경을 설정합니다. | 5 |
Ignore List | 감지에서 제외할 게임 오브젝트 목록을 설정합니다. | 없음 |
Enable Tag Filter | 특정 태그를 가진 객체만 감지하도록 설정합니다. | 비활성화 |
Detects On Layers | 감지할 물리 레이어를 설정합니다. | Nothing |
Detection Mode | 감지할 객체의 유형을 설정합니다. | Colliders |
Ignore Trigger Colliders | 트리거 콜라이더를 무시할지 여부를 설정합니다. | 비활성화 |
Signal Processors | 신호를 처리할 프로세서 수를 설정합니다. | 0 |
Pulse Mode | 센서가 감지 루틴을 실행하는 빈도를 설정합니다. | Each Frame |
Update Function | 센서의 업데이트가 이루어지는 시점을 설정합니다. | Update |
Events | 감지 이벤트를 설정할 수 있는 옵션입니다. | - |
Test | 현재 설정된 상태에서 센서를 테스트할 수 있는 기능입니다. | - |
Trigger Sensor
Trigger Sensor는 Trigger Collider를 사용하여 객체의 충돌 이벤트를 감지하는 센서입니다. OnTriggerEnter와 OnTriggerExit 이벤트를 통해 객체의 입장 및 퇴장을 감지합니다.
설정 항목 | 설명 | 현재 설정 |
Ignore List | 감지에서 제외할 게임 오브젝트 목록을 설정합니다. | 없음 |
Enable Tag Filter | 특정 태그를 가진 객체만 감지하도록 설정합니다. | 비활성화 |
Detection Mode | 감지할 객체의 유형을 설정합니다. | Colliders |
Signal Processors | 신호를 처리할 프로세서 수를 설정합니다. | 0 |
Run In Safe Mode | 안전 모드에서 실행하도록 설정합니다. | 비활성화 |
Events | 감지 이벤트를 설정할 수 있는 옵션입니다. | - |
Trigger Sensor에는 FOV Collider를 사용하기 좋습니다!
Line of Sight(LOS) Sensor
LOS Sensor는 객체의 가시성을 계산하여 감지하는 센서입니다. 다른 센서로부터 입력 신호를 받아 Line of Sight를 테스트하여 객체가 실제로 보이는지를 결정합니다.
설정 항목 | 설명 | 현재 설정 |
Input Sensor | 신호를 입력받을 센서를 설정합니다. | None |
Blocks Line Of Sight | 가시성을 차단할 물리 레이어를 설정합니다. | Nothing |
Ignore Trigger Colliders | 트리거 콜라이더를 무시할지 여부를 설정합니다. | 비활성화 |
Test LOS Targets Only | LOSTargets 컴포넌트가 있는 객체만 테스트할지 여부를 설정합니다. | 비활성화 |
Number Of Rays | 객체에 대해 몇 개의 광선을 발사할지를 설정합니다. | 1 |
Point Sampling Method | 테스트 지점을 선택하는 방법을 설정합니다. Fast 또는 Accurate 중 선택 가능합니다. | Fast |
Moving Average | 가시성 점수를 여러 펄스에 걸쳐 평활화할지 여부를 설정합니다. | 비활성화 |
Limit Distance | 가시성을 거리로 제한할지 여부를 설정합니다. | 비활성화 |
Limit View Angle | 가시성을 시야각으로 제한할지 여부를 설정합니다. | 비활성화 |
Minimum Visibility | 감지하기 위한 최소 가시성 퍼센티지를 설정합니다. | 0.5 |
Pulse Mode | 센서가 감지 루틴을 실행하는 빈도를 설정합니다. | Each Frame |
Update Function | 센서의 업데이트가 이루어지는 시점을 설정합니다. | Update |
Events | 감지 이벤트를 설정할 수 있는 옵션입니다. | - |
Test | 현재 설정된 상태에서 센서를 테스트할 수 있는 기능입니다. | - |
LOS를 예시로 한 사용 방법
LOS Sensor를 이용하기 위해서는 다른 Input Sensor가 필요합니다. 여기서는 Range Sensor를 이용하겠습니다.
왼쪽 사진의 경우 탐지 거리 범위 이내에 존재하고 Limit Angle 사이에 존재하기 때문에 감지할 수 있는 상태입니다.
우측 사진의 경우 탐지 거리 범위 이내에 존재하지만 Limit Angle 사이에 벗어나기 때문에 감지할 수 없는 상태입니다.
public bool CanSeePlayer()
{
return DetectionSensor.GetNearestDetection()!= null;
}
코드 예시의 경우 위와 같습니다.
구매 링크
이 글은 어필리에이트 링크를 포함하고 있습니다.
위 링크를 클릭하셔서 애셋을 구매하시면 저에게 수수료가 제공됩니다.
링크를 클릭하는 것으로는 수익이 발생하지 않습니다!
감사합니다.