새소식

💻 Programming (프로그래밍)/Unity | C#

[Unity] 레이(Ray), 레이 캐스트(Raycast)란?

  • -

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

 

 

얻을 수 있는 변수들로는 아래와 같이 있습니다.

barycentricCoordinate 충돌한 삼각면의 무게중심(barycentric) 좌표를 나타냅니다.
collider 충돌한 Collider를 나타냅니다.
distance ray의 원점으로부터 충돌 지점까지의 거리를 나타냅니다.
lightmapCoord 충돌 지점에서의 uv 라이트맵(lightmap) 좌표를 나타냅니다.
normal ray가 충돌한 표면의 노멀(normal)값을 나타냅니다.
point ray가 충돌한 충돌체(collider)의 충돌 지점을 나타내며 월드 좌표를 사용합니다.
rigidbody 충돌한 충돌체(collider)의 Rigidbody를 나타냅니다. 충돌체가 리지드바디(rigidbody)가 없는 경우에 /null/을 반환합니다.
textureCoord 충돌 위치에서의 uv 텍스쳐 좌표를 나타냅니다.
textureCoord2 충돌 위치에서의 이차 uv 텍스쳐 좌표를 나타냅니다.
transform 충돌한 Transform의 리지드바디(rigidbody)또는 충돌체(collider)를 나타냅니다.
triangleIndex 충돌한 삼각면의 인덱스를 나타냅니다.
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.