Unity에서 Camera.main.ScreenPointToRay 함수 사용하기
Unity에서 카메라의 시야에 있는 스크린 상의 점을 광선으로 변환하는 데 사용되는 함수가 Camera.main.ScreenPointToRay입니다. 이 함수는 다음과 같은 인수를 사용합니다.
- screenPoint : 스크린 상의 점의 좌표입니다.
- worldUp : 카메라의 월드 업 벡터입니다.
이 함수는 다음과 같은 반환 값을 가집니다.
- ray : 스크린 상의 점을 나타내는 광선입니다.
사용 예제
void Update()
{
// 스크린 상의 점을 가져옵니다.
Vector3 screenPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 스크린 상의 점을 광선으로 변환합니다.
Ray ray = Camera.main.ScreenPointToRay(screenPoint);
// 광선을 사용하여 게임 오브젝트를 찾습니다.
Collider hitCollider = Physics.Raycast(ray);
// 광선이 게임 오브젝트를 찾으면, 해당 오브젝트에 대한 정보를 출력합니다.
if (hitCollider != null)
{
Debug.Log(hitCollider.gameObject.name);
}
}
이 예제에서는 Input.mousePosition을 사용하여 스크린 상의 점을 가져옵니다. 그런 다음, Camera.main.ScreenPointToRay 함수를 사용하여 스크린 상의 점을 광선으로 변환합니다. 마지막으로, Physics.Raycast 함수를 사용하여 광선을 사용하여 게임 오브젝트를 찾습니다.
이미지 설명
아래 사진에 보이는 파란색 선이 마우스 클릭한 위치의 Ray입니다.
한계
Camera.main.ScreenPointToRay 함수는 카메라의 시야에 있는 스크린 상의 점을 광선으로 변환할 수 있습니다. 하지만, 카메라의 시야 밖에 있는 스크린 상의 점을 광선으로 변환할 수는 없습니다.
예를 들어, 카메라의 시야 밖에 있는 화면 왼쪽 끝을 광선으로 변환하려고 하면, Camera.main.ScreenPointToRay 함수는 다음과 같은 오류를 발생시킵니다.
System.ArgumentException: 'screenPoint' is not in the camera's frustum.
이 문제를 해결하려면, Camera.main.ScreenPointToRay 함수 대신 Camera.main.ViewportPointToRay 함수를 사용할 수 있습니다. Camera.main.ViewportPointToRay 함수는 카메라의 시야 안에 있는 모든 스크린 상의 점을 광선으로 변환할 수 있습니다.
'Unity' 카테고리의 다른 글
Animator State Transition : Has Exit Time (0) | 2023.12.12 |
---|---|
월드 공간 지점을 스크린상의 지점으로 변환 : WorldToScreenPoint (0) | 2023.12.08 |
Unity의 Character Controller : 간단하게 움직임 구현 (0) | 2023.12.05 |
Unity의 Collision에 관하여 (0) | 2023.11.30 |
Unity의 PointEventData 클래스 (0) | 2023.11.27 |