이번에 끝난 프로젝트를 진행하면서 충돌처리를 위해 Collision 과 Collider를 활용하였다.
OnCollisionEnter , Stay 등을 통해 충돌한 오브젝트와 상호작용을 하는 방식이라면
RayCast 는 오브젝트에서 레이저를 발사하여 레이저에 닿은 오브젝트를 판별하는 형태다.
Ray 에 대해 먼저 알아보자면 Ray는 뻗어나가는 직선을 뜻합니다.
오브젝트에서 이용하는 방식은 광선이 나갈 오브젝트의 시작점(origin) 광선의 방향(direction)을 정해주어 사용합니다.
Ray를 카메라에서 사용하는 방식도 있는데
ViewportPointToRay 는 0에 1범위의 정규화된 벡터값을 이용하고
ScreenPointToRay 픽셀 좌표를 사용한다는 차이입니다.
Ray ray = new Ray(transform.position,transform.forward); //스크립트를 붙인 오브젝트에서 쓰이는 Ray
Ray ray = Camera.main.ViewportPointToRay(new Vector3 (0.5f, 0.5f, 0)); // 카메라 중심
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //마우스 위치
RayCast 는 광선(Ray) 에 맞은 물체를 판별 후 후처리를 하는 방식을 통틀어 말하는 겁니다.
RayCastHit, MaxDistance,LayerMask 등이 포함됩니다.
RayCastHit 메서드는 RayCast 에 맞은 오브젝트의 객체의 정보가 담겨져있습니다.
RayCastHit.point 레이캐스팅이 감지된 위치값
RayCastHit.distance Ray의 시작점에서 충돌된 지점까지의 거리
RayCastHit.transform 충돌된 객체의 transform 에 대한 참조
디버그를 통해 레이의 범위를 확인하려면 Gizmos.DrawRay 프로퍼티를 통해 확인 할 수있습니다.
Gizmos.DrawRay(위치,방향 및 거리);
Vector3.down은 (0,-1,0)인 값이므로 0.2f 를 곱해주면 (0,-0.2f,0) 인 값이 됩니다. 이렇게 OnDrawGizmosSelected 메서드 안에 쓰고 보면
씬 창에서도 이렇게 Ray의 방향과 거리를 알 수 있습니다.
'자료 관리' 카테고리의 다른 글
시간 복잡도 (0) | 2024.10.23 |
---|---|
오브젝트 풀링 (0) | 2024.10.23 |
Rigidbody - ForceMode (1) | 2024.10.22 |
유니티 인풋 필드(Input Field) (1) | 2024.10.12 |
캐스팅 연산자 as (1) | 2024.10.10 |