핵심 정리
| 항목 | 내용 |
|---|---|
| 역할 | 씬을 어떤 시점, 어떤 범위, 어떤 레이어로 렌더링할지 결정하는 뷰 컴포넌트 |
| 언제 쓰는가 | 플레이 화면, 미니맵, UI 전용 카메라, 컷신 카메라, Render Texture 출력을 만들 때 |
| 기준 버전 | Unity 6.5 (6000.5) |
| 핵심 Inspector | Projection, FOV/Size, Clipping Planes, Culling Mask, Viewport Rect, Target Texture, Depth/Output 관련 항목 |
| 자주 연결되는 API | fieldOfView, orthographic, orthographicSize, cullingMask, ScreenPointToRay, WorldToScreenPoint, Render |
Inspector 설정
| 설정값 | 언제 바꾸는가 | 잘못 맞추면 생기는 문제 |
|---|---|---|
| Projection | 3D 원근감인지, 2D/전략식 평행 투영인지 정할 때 | fieldOfView와 orthographicSize 중 엉뚱한 값을 만짐 |
| Field of View / Size | 시야각, 줌 거리, 화면 정보량을 맞출 때 | 왜곡 과다, 답답한 시야, 거리감 이상 |
| Near / Far Clipping Planes | 깊이 범위와 렌더링 비용을 조정할 때 | Z-fighting, 먼 오브젝트 누락, 불필요한 렌더 비용 |
| Culling Mask | 특정 Layer만 보이게 하거나 숨길 때 | UI/월드/무기 전용 레이어가 섞여 보임 |
| Viewport Rect | 분할 화면, 미니맵, 보조 창을 만들 때 | 메인 화면 비율이 잘려 보이거나 위치가 어긋남 |
| Target Texture | 화면 대신 Render Texture에 출력할 때 | 카메라가 보이지 않는 줄 알았는데 실제론 다른 타깃으로 렌더링 중 |
Projection, FOV, Size
Perspective는 원근감을 만들고, Orthographic은 거리와 무관한 크기를 유지합니다. 3D 플레이어 카메라, FPS, TPS는 Perspective가 기본이고, 2D 게임, 전략 지도, 픽셀 정렬 UI 캡처는 Orthographic이 더 자연스럽습니다.
Perspective에서는 Field of View, Orthographic에서는 Size가 핵심입니다. FOV를 크게 하면 넓게 보이지만 왜곡이 커지고, 너무 좁히면 답답하고 거리감이 이상해집니다.
| 값 | 언제 고르는가 | 주의할 점 |
|---|---|---|
Projection = Perspective | 3D 플레이, 원근감이 필요한 탐험/전투 화면 | FOV를 과하게 키우면 가장자리 왜곡이 거슬릴 수 있음 |
Projection = Orthographic | 2D, 전략맵, 등각풍 연출, 미니맵 캡처 | 거리감 표현이 줄어 원근 기반 연출은 약해짐 |
Clipping Planes, Culling Mask
Near/Far Clipping Plane은 카메라가 보는 깊이 범위입니다. Near를 너무 작게 두면 깊이 정밀도가 나빠져 Z-fighting이 늘 수 있고, Far를 지나치게 크게 잡으면 보이지 않는 먼 오브젝트까지 비용이 들어갑니다.
Culling Mask는 어떤 Layer를 렌더링할지 정합니다. UI 전용 카메라, 미니맵, 플레이어 1인칭 팔만 따로 그리는 카메라는 Culling Mask를 확실히 분리해야 씬이 겹치지 않습니다.
Viewport Rect, Target Texture, Output
Viewport Rect는 화면 안에서 카메라가 차지하는 비율입니다. 분할 화면, 미니맵, 보조 뷰를 만들 때 씁니다. Target Texture를 지정하면 화면 대신 Render Texture에 그리므로 보안 카메라, 포털, 미니맵 구현에 자주 연결됩니다.
렌더 파이프라인에 따라 보이는 옵션은 조금씩 다를 수 있습니다. Built-in, URP, HDRP마다 HDR, MSAA, post-processing 연결 위치가 다르게 노출될 수 있으므로, 공통값과 파이프라인 전용값을 구분해서 읽는 편이 안전합니다.
스크립트 연결
| 필드/프로퍼티 | 언제 읽거나 쓰는가 | 주의할 점 |
|---|---|---|
fieldOfView | 줌 연출, 달리기 시야 확장 | Orthographic 카메라에는 직접 의미 없음 |
orthographic / orthographicSize | 2D, 전략맵, 등각 연출 | Perspective와 값 해석이 다름 |
nearClipPlane / farClipPlane | 깊이 문제, 근접 카메라 조정 | 과도하게 넓히면 정밀도 손실 |
cullingMask | 카메라별 표시 레이어 전환 | 비트마스크라 단순 숫자 덮어쓰기 실수 주의 |
targetTexture | CCTV, 포털, 미니맵 출력 | 해상도와 메모리 비용이 함께 듦 |
| 메서드 | 언제 쓰는가 | 연결 지점 |
|---|---|---|
ScreenPointToRay() | 클릭, 터치, 조준 Ray 생성 | Update 입력 처리 |
ScreenToWorldPoint() | UI/마우스 좌표를 월드로 바꿀 때 | 드래그, 배치 시스템 |
WorldToScreenPoint() | 월드 오브젝트 위에 UI를 붙일 때 | HUD, 이름표 |
Render() | 수동 렌더, 썸네일 캡처가 필요할 때 | 캡처 함수, 툴성 로직 |
카메라는 좌표 변환과 레이 생성에서 자주 씁니다.
using UnityEngine;
public class ClickToMove : MonoBehaviour
{
[SerializeField] private Camera mainCamera;
private void Update()
{
if (!Input.GetMouseButtonDown(0)) return;
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit))
{
Debug.Log($"클릭한 월드 위치: {hit.point}");
}
}
}좌표 변환은 Update, 카메라 추적은 LateUpdate, 수동 렌더링이나 캡처는 Render와 Render Texture 연결이 흔한 조합입니다.
자주 틀리는 부분
- Near/Far 범위를 무심코 넓게 잡아 깊이 문제와 불필요한 렌더 비용을 동시에 만들기 쉽습니다.
- Culling Mask를 분리하지 않아 UI 전용 카메라와 월드 카메라가 서로 같은 레이어를 그리는 경우가 많습니다.
- Perspective/Orthographic을 바꿨는데
fieldOfView와orthographicSize중 실제 사용 값을 잘못 수정하기 쉽습니다. - Render Texture 출력 카메라가 씬 메인 카메라와 같은 Audio Listener 흐름까지 가져가면 경고가 생길 수 있습니다.
관련 컴포넌트
Canvas, Light, Transform, Cinemachine 기본, Cinemachine 구도 잡기
참고 링크
2 sources