Ray란?
ray는 광선이라는 의미를 가지고 있습니다. origin 에서 시작해 direction 방향으로 나아가는 무한대 길이의 광선입니다.
public Ray(Vector3 origin, Vector3 direction);
- Ray의 매개변수로는 광선을 쏘는 포지션(Vector3 origin), 광선을 쏘는 방향(Vector3 dirction)이 있습니다.
예를 들어, 이런식으로 사용합니다.
Ray ray = new Ray(transform.position, transform.forward); // z축 방향으로 나아가는 광선입니다.
- 혹은 Camera.ScreenPointToRay 를 통해 화면을 클릭 시, 레이로 변환할 수도 있습니다.
Camera cam;
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
이때의 Camera.ScreenPointToRay는 카메라가 보고있는 2차원 공간을 대상으로 포지션을 잡아 x,y축만 사용합니다. z축은 무시됩니다.
Physics.Raycast
우리가 쓰려는 레이캐스트는, 이 Physics.Raycast란 함수를 통해 레이를 쏘아 물체와 맞는지 맞지 않는지를 확인하는 bool 값을 얻을 수 있습니다.
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity,
int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
주로 이런 형태로 함수가 들어가고,
Origin(레이의 스타팅포인트), Direction(레이의 방향) 은 Ray 객체로 대체될 수 있습니다.
또한 원한다면 out RayCastHit(객체)에 정보를 저장 할 수 있습니다.
RaycastHit는
ray를 쏘아 충돌한 오브젝트의 정보를 얻기위해 사용되는 구조체 입니다.
사용법은 Physics.Raycast, Physics.Linecast, Physics.RaycastAll 을 통해 저장합니다.
RaycastHit hit;
Physics.Raycast(ray, out hit, 100) // ray, hitInfo, maxDistance
얻을 수 있는 변수들로는 아래와 같이 있습니다.