본문 바로가기
[ Unity ]/- 유니티 실습

유니티 GameSettingsUIManager

by MRG 2024. 9. 17.
728x90
반응형

 

▣ 먼저 Canvas를 생성하고 Button 및 Text를 활용하여 GameSettingUI를 제작합니다. 

 

 

 

▣ Canvas Scaler의 각 필드 설명
UI Scale Mode (UI 스케일 모드):

UI의 스케일 방식에 대한 설정입니다. 해상도에 따라 UI가 어떻게 조정될지를 결정합니다.
Constant Pixel Size: UI 요소의 크기를 픽셀 크기로 고정합니다.
Scale with Screen Size: 화면 크기에 맞춰 UI 요소의 크기를 스케일 합니다.
Constant Physical Size: 물리적 크기에 따라 UI 요소의 크기를 조정합니다.

 

▣ Reference Resolution (기준 해상도):
Scale with Screen Size 모드에서 사용됩니다. 기준 해상도를 설정하면 이 해상도에 맞춰 UI가 비율에 맞게 스케일 됩니다.
예를 들어 3840x2160을 기준 해상도로 설정하면, 더 큰 해상도에서는 UI가 커지고, 더 작은 해상도에서는 UI가 작아집니다.


▣ Screen Match Mode:
해상도가 기준 해상도와 다를 때, UI가 너비와 높이 중 어느 쪽을 기준으로 스케일 될지를 결정합니다.
Match Width or Height: 너비와 높이 중 어느 쪽을 더 중시할지 결정할 수 있습니다.
Expand: 화면의 작은 쪽에 맞춰 UI를 확장합니다.
Shrink: 화면의 큰 쪽에 맞춰 UI를 축소합니다.


▣ Match Width or Height:
Match Width or Height 모드에서 너비와 높이를 어떻게 조정할지를 설정합니다. 0이면 너비, 1이면 높이에 맞춥니다. 0.5로 설정하면 둘의 비율을 균등하게 맞춥니다.

 

 

▣ CanvasScaler 설정 시 UI가 화면을 벗어나는 문제는 주로 잘못된 스케일링 방식이나 참조 해상도 설정으로 인해 발생합니다. 해상도가 변경될 때 UI 요소들이 화면에 맞게 스케일링되지 않아, 화면을 벗어나거나 크기가 비정상적으로 변할 수 있습니다. 이를 방지하려면 CanvasScaler 설정을 보다 정확하게 조정하고, 해상도가 바뀔 때도 UI가 자연스럽게 스케일링되도록 해야 합니다.

이를 해결하기 위한 주요 방법은 다음과 같습니다:
해결 방법
적절한 Reference Resolution(참조 해상도) 설정:
해상도를 변경할 때 CanvasScaler의 referenceResolution을 일관되게 유지하여 UI가 특정 해상도에서 가장 잘 보이도록 합니다.
예를 들어, 기본적으로 자주 사용되는 해상도(1920x1080)를 참조 해상도로 설정하고, 다른 해상도에서는 화면 비율에 맞춰 UI를 조정하는 방식입니다.


Screen Match Mode 설정:
Match Width or Height 옵션을 적절히 조정하여 UI가 화면의 너비나 높이에 맞춰서 자동으로 스케일 되도록 합니다. 일반적으로 0.5는 너비와 높이를 균등하게 맞추지만, 해상도에 따라 0(너비 우선) 또는 1(높이 우선)로 설정할 수 있습니다.


Anchor와 Pivot을 적절히 설정:
UI 요소가 화면을 벗어나는 문제는 RectTransform의 Anchor(앵커) 설정이 잘못된 경우에도 발생할 수 있습니다. UI 요소의 앵커를 적절하게 설정하면, 해상도에 따라 UI가 잘 정렬되고 크기가 조정됩니다.

 

 

▣ UpdateResolutionText(), UpdateGraphicsQualityText(), UpdateFullScreenText() 메서드는 각 설정 값에 맞는 UI 텍스트를 업데이트합니다.

해상도는 Screen.SetResolution()을 통해 적용됩니다.
그래픽 품질은 QualitySettings.SetQualityLevel()을 사용하여 설정됩니다.
ApplyCanvasScalerSettings()를 통해 CanvasScaler 설정도 변경됩니다.

CanvasScaler의 referenceResolution을 해상도에 따라 설정합니다. 예를 들어, resolutionIndex == 1일 경우 1920x1080 해상도가 설정됩니다.
matchWidthOrHeight = 0.5f는 너비와 높이를 균등하게 맞추는 설정입니다.

SaveSettings(): PlayerPrefs를 사용하여 설정을 저장합니다. 저장된 값은 게임을 종료하고 다시 실행해도 유지됩니다.
LoadSettings(): 저장된 설정을 불러와 초기 상태를 설정합니다.
요약
이 스크립트는 게임 내 해상도, 그래픽 품질, 전체화면 설정을 관리하고 저장/불러오기 기능을 제공하는 UI 관리 시스템입니다. UI를 통해 설정을 조정하고, 사용자가 설정을 적용하면 CanvasScaler도 자동으로 조정되어 해상도가 변경될 때 UI가 적절하게 스케일 됩니다.

 

 

 

▣  해상도 및 그래픽 품질 설정
해상도 설정: OnResolutionLeftClick()과 OnResolutionRightClick() 메서드는 사용자가 왼쪽 또는 오른쪽 버튼을 눌러 해상도를 변경할 수 있도록 합니다.
그래픽 품질 설정: OnGraphicsLeftClick()과 OnGraphicsRightClick() 메서드는 그래픽 품질을 변경하는 데 사용됩니다.
전체화면 설정: OnFullScreenToggleClick() 메서드는 전체화면 여부를 토글(켜짐/꺼짐)하는 역할을 합니다.

 

 

https://docs.unity3d.com/ScriptReference/Screen.SetResolution.html

 

Unity - Scripting API: Screen.SetResolution

A width by height resolution is used. If no matching resolution is supported, the closest one is used. If preferredRefreshRate is 0 (default) Unity switches to the highest refresh rate that the monitor supports. If preferredRefreshRate is not 0 Unity uses

docs.unity3d.com

https://docs.unity3d.com/ScriptReference/QualitySettings.SetQualityLevel.html

 

Unity - Scripting API: QualitySettings.SetQualityLevel

Note that changing the quality level can be an expensive operation if the new level has different anti-aliasing setting. It's fine to change the level when applying in-game quality options, but if you want to dynamically adjust quality level at runtime, pa

docs.unity3d.com

https://docs.unity3d.com/ScriptReference/UnityEngine.UI.CanvasScaler.html

https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

 

Unity - Scripting API: PlayerPrefs

Unity stores PlayerPrefs in a local registry, without encryption. Do not use PlayerPrefs data to store sensitive data. Unity stores PlayerPrefs data differently based on which operating system the application runs on. In the file paths given on this page,

docs.unity3d.com

https://docs.unity3d.com/ScriptReference/UI.Text.html

https://docs.unity3d.com/ScriptReference/Mathf.Max.html

 

Unity - Scripting API: Mathf.Max

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close

docs.unity3d.com

 

728x90
반응형

'[ Unity ] > - 유니티 실습' 카테고리의 다른 글

유니티 PauseMenu  (9) 2024.09.18
유니티 Loading Scene  (8) 2024.09.18
유니티 Camera Shake  (0) 2024.09.15
유니티 Single RayCast, Multi RayCast  (1) 2024.09.14
유니티 Animator, Animation, Blend Tree  (1) 2024.09.14

댓글