ui
OnGUI, NGUI, UGUI
OnGUI
- UGUI가 나오기 전인 Unity 4.5 버전까지 사용했던 Unity Built-In UI
- 시각적 개발을 지원하지 않음 (UI배치, 스타일 설정등 100% 코드기반으로 작동)
- 표면 레이어를 기반으로 하기 때문에 실행 효율이 매우 낮음
NGUI
- UGUI가 나오기 이전에 많이 사요왼 타사 유료 플러그인(2020.10.25 기준 95달러)
- 레퍼런스가 다양하며, 다양한 크기의 화면에 최적화 시키기 쉽다
- 정적인 화면에 최적화가 잘 되어있다
- 동적 할당을 할때 Sprite를 다시 그리기 때문에 비효율적이다
UGUI
- Unity에서 제공하는 Unity Built-In UI (4.6이후)
- 추가 구매 없이 바로 사용가능
- 직관적인 UI 구성요소 간의 Depth 조절 가능
- Sprite Atlas 관리 (폴더 단위로도 가능)
- Particle Rendering 문제가 존재한다
- Tweening을 기본으로 지운하지 않는다
- 동적 할당이 쉽고 편하며, 효율이 NGUI보다 좋다
- UI 확장 에셋을 쉽게 구할 수 있으며, Unity에서도 지속적으로 관리해 준다.
각종 사항
Anchors
- 그냥클릭 : 앵커 위치만 설정
- 알트클릭 : 앵커 위치 및 객체 위치 동시설정
- 쉬프트클리 : 앵커 위치 및 피봇 동시설정
- 알트쉬프트클릭 : 앵커, 객체 위치, 피봇 동시 설정
Render Mode
- Screen Space - Overlay : 카메라의 위치와 관계 없이 모든 월드 오브젝트보다 앞에 그려짐
- Screen Space - Camera : UI위치가 카메라의 위치와 연관되게 (위치 관계에 따라 UI가 가려질 수 있음)
- World Space : 실제 공간에 UI를 배치
Canvas Scaler
- Canvas 크기조절하는 컴퍼넌트 옵션값 중요
- Constant Pixel Size : 화면 크기에 관계없이 UI의 위치나 크기가 픽셀에 대한 단순한 배율로 지적됨
- Scale Factor : 모든 요소의 화면내 비율
- Reference Pixels Per Unit : 이미지 컴퍼넌트를 가지는 UI의경우 Sprite에 ‘Pixels Per Unit’ 설정이 있으면 Sprite 1px = UI 1unit
- Scale With Screen Size : 화면에 따라 UI의 위치나 크기가 함께 수정됨 (모바일은 화면비율이 제각각이라 Scale Width Screen Size 가 가장 많이 쓰임)
- Reference Resolution : UI의 적정 해상도 크기를 설정
- Screen Match Mode : 현재 해상도의 종횡비가 Reference Resolution과 같지 않을때 Cavas 영역 크기를 설정할때 사용되는 모드
- Match Width Or Height :
- Expand: Canvas가 reference resolution 보다 작아지지 않도록 수평 또는 수직으로 확장
- Shirink: Canvas가 reference resolution 보다 커지지 않도록 수평 또는 수직을 자름
- Constant Physical Size : 화면의 크기에 관계없이 UI 요소가 동일한 물리적인 크기로 유지된다
Graphic Raycaster
- Screen Space - Overlay 일경우 카메라를 사용하지 않고 렌더링 과정에서 그려진 오브젝트 위에 UI를 덧그림
- 이때 canvas 안을 검색하는 raycaster
OnGUI를 이용한 동적생성
private void OnGUI()
{
if (!isGuiShowing) return;
// Make a background box
GUI.Box(new Rect(10, 10, 100, 90), "Loader Menu");
// Make the first button. If it is pressed, Application.Loadlevel (1) will be executed
if (GUI.Button(new Rect(20, 40, 80, 20), "Level 1"))
{
Debug.Log("level1 clicked");
}
// Make the second button.
if (GUI.Button(new Rect(20, 70, 80, 20), "Level 2"))
{
Debug.Log("level2 clicked");
}
GUI.Box(new Rect(0, 0, 200, 100), "Top-left");
GUI.Box(new Rect(Screen.width - 200, 0, 200, 100), "Top-right");
GUI.Box(new Rect(0, Screen.height - 100, 200, 100), "Bottom-left");
GUI.Box(new Rect(Screen.width - 200, Screen.height - 100, 200, 100), "Bottom-right");
}
참고 링크
- https://wergia.tistory.com/184
- https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/HOWTO-UICreateFromScripting.html
- https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnGUI.html
- https://docs.unity3d.com/kr/530/Manual/gui-Basics.html