일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- base64
- jumping ball
- Unity Editor
- 텍스트 메시 프로
- TextMeshPro
- 2D Camera
- 샘플
- DotsTween
- job
- Tween
- 커스텀 패키지
- 가이드
- C#
- unity
- 암호화
- sha
- Dynamic Font
- Dots
- Framework
- 이미지 폰트
- adfit
- RSA
- 프레임워크
- ui
- Job 시스템
- Custom Package
- 최적화
- 단말기 해상도
- 다이나믹 폰트
- AES
- Today
- Total
EveryDay.DevUp
[Unity] 프레임워크 개발 - 4. 2D Camera 본문
단말기에 따른 Camera 설정의 이론은 다음의 게시물을 통해 확인 가능
https://everyday-devup.tistory.com/7
● 단말기의 해상도 체크
▶ Unity Editor에서의 Game View 사이즈의 실시간 크기 조정이나, 해상도가 각기 다른 액정을 2개 가지고 있는 단말기 등 다양한 이유로 해상도가 실시간으로 변경되는 경우가 발생
▶ ScreenManager는 Update를 통해 매프레임 해상도의 변화를 체크 후, 사이즈 변경이 발생했을 때 관찰자들에게 해상도가 변경되었다는 점을 공지해줌
◎ Game Script에서 ScreenManager의 Update 매프레임마다 호출 : https://everyday-devup.tistory.com/16
◎ 옵저버 패턴을 사용 : https://everyday-devup.tistory.com/17
[ 옵저버 패턴의 대상 ]
▶ ScreenManager는 매 프레임마다 Screen의 크기가 달라졌는지 체크 후, 달라졌을 때 관찰자들에게 통보
using UnityEngine;
public class ScreenManager : Subject, IManage
{
public int ScreenWidth { get; private set; } = 0;
public int ScreenHeight { get; private set; } = 0;
public ScreenManager()
{
Loop();
}
public void Loop()
{
if( ScreenWidth != Screen.width || ScreenHeight != Screen.height )
{
ScreenWidth = Screen.width;
ScreenHeight = Screen.height;
OnNotify();
}
}
}
[ 옵저버 패턴의 관찰자]
▶ Camera2D는 Screen의 크기가 변경되었다는 노티를 받으면 현재 카메라의 크기를 해상도에 맞게 변경 후 관찰자들에게 노티
using UnityEngine;
[RequireComponent( typeof( Camera ) )]
public class Camera2D : Subject, IObserver
{
[HideInInspector]
public int minWidth;
[HideInInspector]
public int minHeight;
[HideInInspector]
public bool matchWidth;
[HideInInspector]
public int screenWidth;
[HideInInspector]
public int screenHeight;
public int Priority { get; set; }
public OBSERVER_STATE State { get; set; }
private Camera _cam;
public void OnEnable()
{
if( Game.Instance == null )
{
return;
}
ScreenManager screenManager = Game.Instance.screenManager;
OnScreenSize( screenManager.ScreenWidth, screenManager.ScreenHeight );
screenManager.AddObserver( this );
}
public void OnDisable()
{
if( Game.Instance == null )
{
return;
}
ScreenManager screenManager = Game.Instance.screenManager;
screenManager.RemoveObserver( this );
}
public void OnResponse(object obj)
{
ScreenManager screenManager = obj as ScreenManager;
if( screenManager != null )
{
OnScreenSize( screenManager.ScreenWidth, screenManager.ScreenHeight );
}
}
public void OnScreenSize(int screenWidth, int screenHeight)
{
if( _cam == null )
{
_cam = GetComponent<Camera>();
}
if( _cam.orthographic == false )
{
_cam.orthographic = true;
}
int orthographicSize = GetOrthographicSize( screenWidth, screenHeight );
_cam.orthographicSize = orthographicSize;
orthographicSize *= 2;
this.screenWidth = ( screenWidth * orthographicSize ) / screenHeight;
this.screenHeight = orthographicSize;
OnNotify();
}
public int GetOrthographicSize(int screenWidth, int screenHeight)
{
int orthographicSize = 0;
float addRate = 0.0f;
if( matchWidth )
{
orthographicSize = Mathf.RoundToInt( ( screenHeight * minWidth ) / screenWidth );
if( orthographicSize < minHeight )
{
addRate = (float)minHeight / orthographicSize;
orthographicSize = Mathf.RoundToInt( orthographicSize * addRate );
}
}
else
{
orthographicSize = minHeight;
int width = ( screenWidth * minHeight ) / screenHeight;
if( width < minWidth )
{
addRate = (float)minWidth / width;
orthographicSize = Mathf.RoundToInt( orthographicSize * addRate );
}
}
return Mathf.RoundToInt( orthographicSize * 0.5f );
}
}
▶ 커스텀 에디터를 활용하여 인스펙터 창에 실행 중일 때 카메라의 사이즈가 나올 수 있도록 함
커스텀 에디터 관련 내용 : https://everyday-devup.tistory.com/19
● 테스트 결과
▶ 18.5 : 9 의 ( 2960 * 1440 ) Game View의 상태, Cube의 크기를 ( 50, 720, 1 )으로 변화된 해상도를 체크하기 위해 테스트로 넣어둠
▶ 1480 * 720의 사이즈로 변경된 카메라를 볼 수 있으며, 720으로 높이를 맞춰둔 큐브가 카메라에 딱 맞게 들어오는 것을 볼 수 있음
'FrameWork' 카테고리의 다른 글
[Unity] 프레임워크 개발 - 5. 암호화 ( 대칭형 암호화 AES ) (0) | 2020.05.04 |
---|---|
[Unity] 프레임워크 개발 - 5. 암호화 ( Base64 ) (0) | 2020.05.02 |
[Unity] 프레임워크 개발 - 3. 기본 구조 ( 옵저버 패턴 ) (0) | 2020.04.30 |
[Unity] 프레임워크 개발 - 2. 기본 구조 ( Game Script ) (0) | 2020.04.30 |
[Unity] 프레임워크 개발 - 1 . 개요 (0) | 2020.04.30 |