Unity 매뉴얼: 카메라와 레이 관련 기능
이 문서에서는 Unity에서 카메라와 레이를 활용하는 방법에 대해 설명하고, 각각의 기능을 간단하게 해설합니다. 예제 코드도 포함되어 있어 자신의 프로젝트에 적용해 볼 수 있습니다.
카메라에서 나오는 레이
레이(Ray) 오브젝트 이해하기
카메라의 뷰에서 모든 점은 월드 공간의 하나의 선에 대응된다고 설명됩니다. Unity는 이를 레이(Ray) 오브젝트로 제공하며, 레이는 카메라에서 나오는 한 점과 해당 점에서 나가는 방향으로 구성됩니다.
ScreenPointToRay와 ViewportPointToRay
이 두 가지 함수의 차이점은:
- ScreenPointToRay: 픽셀 좌표를 요구합니다.
- ViewportPointToRay: 0에서 1 사이의 정규화된 좌표를 요구합니다.
이러한 함수들은 각각 원점과 방향을 나타내는 레이를 반환하며, 카메라의 근접 클리핑 평면을 기준으로 합니다.
레이캐스팅 (Raycasting)
가장 일반적인 레이의 사용 방법은 씬에서 raycast를 실행하는 것입니다. 이는 가상의 “레이저 빔”을 씬 안의 콜라이더에 충돌할 때까지 발사하고, 충돌한 오브젝트와 그 지점에 대한 정보를 반환합니다.
예제 코드: 마우스 위치에 있는 오브젝트 확인하기
using UnityEngine;
using System.Collections;
public class ExampleScript : MonoBehaviour {
public Camera camera;
void Start(){
RaycastHit hit;
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit)) {
Transform objectHit = hit.transform;
// 레이캐스트로 충돌한 오브젝트에 대한 작업 수행
}
}
}
카메라 이동: 레이를 따라 이동하기
사용자가 오브젝트를 선택하는 경우, 화면 위치를 “고정”하면서 카메라를 이동시키는 것이 유용할 수 있습니다. 예를 들어 사용자가 마우스를 클릭하여 줌인하는 상황을 고려할 수 있습니다.
예제 코드: 레이에 따라 카메라 이동
using UnityEngine;
using System.Collections;
public class ExampleScript : MonoBehaviour {
public bool zooming;
public float zoomSpeed;
public Camera camera;
void Update() {
if (zooming) {
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
float zoomDistance = zoomSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
camera.transform.Translate(ray.direction * zoomDistance, Space.World);
}
}
}
추가 활용 예제
| 기능 | 설명 | 예제 코드 |
|---|---|---|
| 물체 클릭 확인 | 마우스 클릭 시 물체를 감지하는 방법 | [위 예제 코드 참조] |
| 카메라 줌 | 마우스 위치에 반응하여 카메라를 줌하는 방법 | [위 예제 코드 참조] |
| 레이와 충돌 처리 | 레이와 충돌된 오브젝트의 속성 변경 | ```csharp |
| // 속성 변경 코드 추가 | // 오브젝트의 색상 변경 | |
| 레이로 물체 생성 | 레이를 따라 새로운 오브젝트를 생성 | ```csharp |
| // Instantiate를 통한 생성 | // 이미지를 클릭 시 물체 생성 |
이 문서를 통해 Unity의 카메라와 레이에 대한 이해를 높일 수 있으며, 다양한 프로젝트에 활용할 수 있습니다.