
Raycast는 특정 벡터 방향으로 레이를 쏘는 것을 말한다.
예로 들면 게임에서 특정 위치로 이동할 때 이동할 위치에 레이를 쏴서,
이동하기 전 체크 후 이동을 실행하는 방법도 있다.

레이는 Physics 클래스에 있으며
종류는 Box, Capsule, Sphere, Line 이 있어서 여러 모양의 레이를 쏠 수 있다.

자주 사용하는 Raycast()는 오버로딩이 많이 되어있는데 그 중 위의 매개변수는
- Vector3 origin = 레이가 시작하는 위치
- Vector3 direction = 레이를 쏘는 방향
- out RaycastHit hitInfo = 레이에 닿은 오브젝트의 정보(
transform, collider 등)- float maxDistance = 레이의 길이
이다.
즉, 레이를 쏴서 닿은 대상에 접근할 수 있다고 생각하면 된다.


또한 Camera 클래스에는 Ray 타입을 반환하는 함수들이 많은데,
처음 들었던 생각은 "그냥 카메라 위치에서 대상 위치로 쏘면 되는 거 아니야?" 였다.
하지만 다시 한번 생각해보면 마우스의 위치는 스크린 좌표 (2D) 를 가지는데,
이것을 월드 좌표 (3D)로 변경해야 레이를 쏠 수 있다.
이때 사용하는 것이 ScreenPointToRay() 함수이며,
카메라 기준에서 화면상의 클릭 위치로 레이를 쏘는 것이다.

제일 좋은 예는 RTS 게임 이라고 생각한다.

Gizmo는 유니티 에디터 Scene 뷰에서만 보이는 시각적인 기능이다.

Gizmos 클래스에 레이처럼 여러 모양을 그릴 수 있고,
Gizmos.color에 Color 값을 넣어 기즈모의 색을 바꿀 수 있다.
또한 이벤트 함수도 존재하는데,

void OnDrawGizmos()
{
// 앞에 레이저 쏘기
Gizmos.color = Color.red;
Gizmos.DrawLine(transform.position, transform.position + transform.forward * 5);
}
- OnDrawGizmos() : 씬뷰에서 항상 그려지는 기즈모
빨간색 기즈모가 출력된다.

void OnDrawGizmosSelected()
{
// 선택했을 때 쏘기
Gizmos.color = Color.green;
Gizmos.DrawLine(transform.position, transform.position + transform.forward * 5);
}
- OnDrawGizmosSelected() : 에디터에서 오브젝트를 선택했을 때 그려지는 기즈모
큐브를 선택시 초록색 기즈모가 출력된다.
게임뷰에서 사용안하고 씬뷰에서만 사용한다지만
기즈모를 그리는건 코스트가 없진 않기 때문에 빌드할 때 지우는게 좋다.