728x90
안녕하세요!
이번 글에서는 Unity 2D 플랫폼에서 모바일 게임 개발 중 발생한 해상도 고정 방법에 대해 공유하고자 합니다.
모바일 기기의 종류가 많아짐에 따라 해상도 또한 종류가 많아 졌습니다.
RTS게임의 경우, 모바일 기기 특성으로 인하여 상대방보다 해상도가 작을 때 굉장히 불리한 조건으로 작용될 수 있습니다.
이런 상황들을 예방하기 위해 모든 기기에서 똑같은 해상도로 플레이 할 수 있도록 대응하는 방법에 대해 알아보겠습니다.
프로젝트 생성
- 프로젝트를 생성 해 줍니다.
- 이 예제에서 프로젝트 이름은 ResolutionExample로 설정하였습니다.
Canvas 생성
- [Hierachy]창에서 우클릭 후 [CreateEmpty]를 클릭하여 UI 오브젝트를 만들어 줍니다.
- UI 오브젝트에서 우클릭 후 [UI] → [Canvas]를 클릭하여 UI오브젝트 하위에 Canvas를 생성해 줍니다.
Canvas 수정
- 생성한 Canvas를 클릭 후 [Inspector]창에서 [Canvas Scaler]항목을 수정해 줍니다.
- 이 예제 는 FHD(1920 * 1080) 기준으로 작성되었습니다.
[UI Scale Mode] → 'Scale With Screen Size'
[Reference Resolution] → X '1920', Y '1080'
[ScreenMatchMode] → 'Expand'
테스트용 이미지 오브젝트 생성
- 해상도가 잘 고정이 되었는지 확인하기 위해 캔버스의 모서리에 각각 이미지를 배치해 줍니다.
- [Canvas]에서 우클릭 → [UI] → [Image]로 이미지를 추가해 줍니다.
- 위와 동일하게 4개의 이미지를 추가하여 각 모서리에 배치해 주었습니다.
스크립트 생성
- [Project]창에서 [Assets]폴더 하위에 우클릭 하여 [Script]폴더를 만들어 줍니다.
- [Script]폴더에서 우클릭 후 [Create] → [C# Script]를 선택하여 'CameraManager' 스크립트를 만들어 줍니다.
CameraManager스크립트 작성
- 생성된 [CameraManager.cs]스크립트를 더블클릭해 스크립트를 열어 아래와 같이 수정해 줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraManager : MonoBehaviour
{
[SerializeField]
int FixedWidth; // 사용자 설정 너비
[SerializeField]
int FixedHeight; // 사용자 설정 높이
// Start is called before the first frame update
void Start()
{
//카메라 해상도 고정
SetCameraRect();
}
/* 해상도 고정 */
public void SetCameraRect()
{
int deviceWidth = Screen.width; // 현재 기기 너비 저장
int deviceHeight = Screen.height; // 현재 기기 높이 저장
if ((float)FixedWidth / FixedHeight < (float)deviceWidth / deviceHeight) // 기기의 해상도 비가 더 큰 경우
{
float newWidth = ((float)FixedWidth / FixedHeight) / ((float)deviceWidth / deviceHeight); // 새로운 너비
Camera.main.rect = new Rect((1f - newWidth) / 2f, 0f, newWidth, 1f); // 새로운 Rect 적용
}
else // 게임의 해상도 비가 더 큰 경우
{
float newHeight = ((float)deviceWidth / deviceHeight) / ((float)FixedWidth / FixedHeight); // 새로운 높이
Camera.main.rect = new Rect(0f, (1f - newHeight) / 2f, 1f, newHeight); // 새로운 Rect 적용
}
}
}
- [SerializeField] 를 통하여 외부에서 FixedWidth, FiexedHeight 변수를 설정할 수 있도록 해주었습니다.
- 스크립트는 [https://giseung.tistory.com/19] 글을 참고하여 작성 하였습니다.
MainCamera 스크립트 컴포넌트 추가
- [Hierachy]창에 있는 [Main Camera]오브젝트를 클릭 후 [Inspector]창에 작성한 CameraManager.cs 스크립트를 드래그 & 드롭 해주어 스크립트를 추가해 줍니다.
- [Main Camera]오브젝트에 추가한 스크립트에 [Fixed Width], [Fixed Height]변수를 각각 1920, 1080의 값을 할당해 줍니다.
테스트
- 더 정확히 결과를 시각화 하기 위해 캐릭터 이미지를 하나 추가 하여 테스트를 진행하였습니다.
- 16:9 비율과, 960 * 790비율 에서의 캐릭터의 비율이 동일하게 조절 되는것을 확인할 수 있습니다.
여기까지 여러가지 모바일 해상도에 대응하여 고정된 비율로 플레이 할 수 있는 방법에 대해 알아보았습니다.
게임 개발에 도움이 되셨으면 좋겠습니다.
감사합니다.
728x90