목표
- 카메라가 맵 바깥으로 벗어나지 않도록 이동 범위를 제한하여 자연스러운 뷰 구현하기
핵심 개념
- Orthographic : 2D 게임에서 사용하는 카메라 설정
- TilemapRenderer: 크기 정보를 확인하기 위한 타일맵이 그려진 랜더러
구현 방법
1.카메라 영역 계산
cameraHalfHeight = Camera.main.orthographicSize;
cameraHalfWidth = Mathf.Round(Camera.main.orthographicSize * Camera.main.aspect);
- 카메라의 영역을 계산하기 위해 오소 그래픽 옵션을 활용
- 카메라의 orthographicSize를 5로 설정했다면 카메라의 height는 10
- 중앙을 기준으로 제한점을 찾아야 하기 때문에 절반 사이즈인 orthographicSize을 haltHeight로 설정
- Camera.main.orthographicSize * Camera.main.aspect 를 통해 오소그래픽 5에 해당하는 width 계산
- Camera.main.aspect를 통한 width 계산을 비율을 통해 이뤄지기 때문에 정확한 수치를 받기 위해 Round를 통해 반올림
2.타일맵 경계 설정
public void SetCameraBounds(TilemapRenderer tilemapRenderer)
{
Bounds bounds = tilemapRenderer.bounds;
areaMin = bounds.min;
areaMax = bounds.max;
}
- 이동할 지역의 타일맵 정보에서 bounds를 통해 시작점과 끝점을 계산
3. 카메라 위치 제한
private void ApplyCameraBounds()
{
if (isApply)
{
cameraLimitsHeight = Mathf.Clamp(target.position.y, areaMin.y + cameraHalfHeight, areaMax.y - cameraHalfHeight);
cameraLimitsWidth = Mathf.Clamp(target.position.x, areaMin.x + cameraHalfWidth, areaMax.x - cameraHalfWidth);
cameraPos.x = cameraLimitsWidth;
cameraPos.y = cameraLimitsHeight;
}
else
{
cameraPos = target.position;
cameraPos.z = cameraOffset.z;
}
}
- 카메라가 쫓아가고 있는 대상(target)의 위치를 통해 카메라 이동을 제한
- Clamp value : target의 위치
- Clamp Min : target이 맵의 끝에 도착했을때 보정값을 적용
- 예) areaMin.y + cameraHalfHeight → areaMin.y(0) + cameraHalfHeight(5)
Player 위치(y = 0) → 카메라의 최소 위치 5(areaMin.y + cameraHalfHeight)
Player의 위치가 0에 있어도 카메라의 위치는 5에 고정되어 이동을 제한함
결과

영역 제한이 없다면 위 사진과 같이 빈 영역을 게임씬에 비추게 된다.
오소 그래픽을 통해 제어를 한 이유는 카메라가 target과 함께 이동할때
targer이 0지점에 있다면 카메라는 -5~5범위를 비추게 된다.
그래서 0지점에서 오소그래픽만큼 카메라의 제한이 필요하다.
카메라의 위치를 5로 제한을 걸어주면 카메라는 0~10위치를 비추게 된다.

그러면 -5만큼 빈공간을 비추지 않고 게임씬에 타일맵만 출력하게 된다.
'Unity > 기능' 카테고리의 다른 글
| [Unity] NavMesh - SamplePosition (0) | 2025.05.23 |
|---|---|
| [Unity] 유니티 오브젝트의 법선백터 계산 기준 (0) | 2025.05.22 |
| [Unity] nameof 를 이용한 스크립트 관리 (1) | 2025.05.09 |
| [Unity] 제네릭(Generic) 을 통한 상속 (0) | 2025.05.08 |
| [Unity] UI의 Rect Transform (0) | 2025.05.04 |