# Ray

## Overview

Ray는 3차원 공간에서 하나의 시작점을 기준으로, 지정된 방향을 따라 무한히 뻗어나가는 보이지 않는 광선을 의미합니다. 이 데이터 타입은 충돌을 수행하지 않으며, 방향 기반 계산이나 Raycast를 수행하기 위한 입력값을 구성하는 데 사용됩니다.&#x20;

## Constructors

### new

시작점(Origin)과 방향(Direction)을 입력받아 새로운 Ray를 생성합니다. 생성된 Ray는 지정된 위치에서 시작하여 설정된 방향을 따라 무한히 연장됩니다.

#### Parameters

| `Vector3` InOrigin    | Ray가 시작되는 3차원 공간상의 위치를 지정합니다. 이 값은 광선의 기준점이 됩니다.                          |
| --------------------- | ------------------------------------------------------------------------- |
| `Vector3` InDirection | Ray가 진행할 방향을 나타내는 방향 벡터입니다. 일반적으로 정규화된 벡터를 사용하며, 이 방향을 따라 Ray가 무한히 연장됩니다. |

#### Return

| `Ray` | 지정된 시작점과 방향을 기반으로 생성된 Ray입니다. |
| ----- | ----------------------------- |

#### Code Samples

```lua
local Origin = Vector3.new(0, 50, 0)
local Direction = Vector3.new(0, 0, -1)
local Ray = Ray.new(Origin, Direction)
print(Ray)
```

## Properties

### Origin

`Vector3`&#x20;

이 값은 Ray가 시작되는 지점을 의미하며, 3차원 공간에서 광선이 출발하는 기준 위치를 정의합니다.

#### Code Samples

```lua
local Origin = Vector3.new(0, 50, 0)
local Direction = Vector3.new(0, 0, -1)
local Ray = Ray.new(Origin, Direction)
print(Ray.Origin)
```

### Direction

`Vector3`&#x20;

Ray가 어느 방향으로 진행하는지를 정의하며, 시작점에서부터 광선이 뻗어나가는 방향 기준을 제공합니다. 3차원 공간에서 Ray의 진행 방향을 결정하는 핵심 요소입니다.

#### Code Samples

```lua
local Origin = Vector3.new(0, 50, 0)
local Direction = Vector3.new(0, 0, -1)
local Ray = Ray.new(Origin, Direction)
print(Ray.Direction)
```

### Unit

`Ray`&#x20;

방향 벡터가 정규화된 Ray를 의미하며, 방향의 크기는 항상 1입니다.

#### Code Samples

## Methods

### ClosestPoint

입력된 좌표를 Ray의 시작점과 방향을 기준으로 계산하여, Ray가 바라보는 방향상의 가장 가까운 위치로 변환된 벡터를 반환합니다. 이를 통해 특정 점이 Ray의 시야(line of sight) 상에서 어디에 위치하는지를 구할 수 있으며, 방향 기준 위치 계산이나 거리 판정 등에 활용됩니다.

#### Parameters

| `Vector3` InPoint | Ray를 기준으로 가장 가까운 위치를 계산할 대상이 되는 3차원 공간상의 점입니다. 이 점을 Ray의 시작점과 방향을 기준으로 투영하여 계산에 사용합니다. |
| ----------------- | -------------------------------------------------------------------------------------- |

#### Return

| `Vector3` | 입력된 점에 대해 Ray 상에서 가장 가까운 위치에 해당하는 3차원 좌표를 반환합니다. 반환되는 값은 Ray의 진행 방향 선상(line of sight)에 위치한 점입니다. |
| --------- | ------------------------------------------------------------------------------------------------ |

#### Code Samples

### Distance

입력된 좌표를 기준으로, Ray 위에서 가장 가까운 지점을 계산한 뒤 두 지점 사이의 거리를 반환합니다. 즉, ClosestPoint를 통해 구한 위치와 원래 점 사이의 직선 거리를 제공하며, Ray와 특정 점 사이의 거리 판정에 활용할 수 있습니다.

#### Parameters

| `Vector3` InPoint | Ray와의 거리를 계산할 기준이 되는 3차원 공간상의 점입니다. 이 점을 기준으로 Ray 위에서 가장 가까운 지점을 계산합니다. |
| ----------------- | ----------------------------------------------------------------------- |

#### Return

| `number` | 입력된 점과 Ray 사이의 최단 거리를 반환합니다. 이는 ClosestPoint를 통해 구한 Ray 상의 가장 가까운 지점과 원래 점 사이의 직선 거리입니다. |
| -------- | ---------------------------------------------------------------------------------------- |

#### Code Samples
