Unity 즉시 모드 GUI(IMGUI) 사용 설명서
Unity의 IMGUI(Immediate Mode GUI) 시스템을 사용하여 UI(User Interface)를 만들고 조작하는 방법에 대해 설명합니다. IMGUI는 매 프레임마다 GUI 요소를 그릴 수 있게 해주는 강력한 도구입니다. 이 문서에서는 IMGUI의 기본 처리 방식, GUI 컨트롤을 만드는 방법, 그리고 이를 활용한 예제를 소개합니다.
IMGUI 기본 사항
유니티에서 IMGUI로 컨트롤을 제작하기 위해서는 OnGUI()
라는 특수 함수를 사용합니다. 이 함수는 스크립트가 활성화되면 매 프레임 호출됩니다. IMGUI 컨트롤은 간단한 구조를 가지고 있으며 다음과 같은 형식을 따릅니다.
예제: 레벨 로더
아래 예제는 기본적인 레벨 로더를 보여줍니다.
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour {
void OnGUI () {
GUI.Box(new Rect(10,10,100,90), "Loader Menu");
if(GUI.Button(new Rect(20,40,80,20), "Level 1")) {
Application.LoadLevel(1);
}
if(GUI.Button(new Rect(20,70,80,20), "Level 2")) {
Application.LoadLevel(2);
}
}
}
위 코드를 GameObject에 연결하면 Play Mode에서 "Loader Menu"가 나타납니다.
GUI 컨트롤 생성
IMGUI에서 컨트롤을 선언할 때는 다음 구조를 따릅니다.
Type(Position, Content)
각 매개변수의 의미는 다음과 같습니다:
- Type: 컨트롤 타입을 정의합니다. 예를 들어
GUI.Label()
은 비상호작용적 레이블을 생성합니다. - Position: 이 인수는
Rect()
함수를 포함하며, 컨트롤의 위치와 크기를 지정합니다. - Content: 실제 표시되는 콘텐츠입니다. 텍스트나 이미지 등으로 설정할 수 있습니다.
위치와 크기 예제
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour {
void OnGUI() {
GUI.Box (new Rect (0,0,100,50), "Top-left");
GUI.Box (new Rect (Screen.width - 100,0,100,50), "Top-right");
GUI.Box (new Rect (0,Screen.height - 50,100,50), "Bottom-left");
GUI.Box (new Rect (Screen.width - 100,Screen.height - 50,100,50), "Bottom-right");
}
}
여기서 Screen.width
와 Screen.height
를 사용해 배치된 박스를 화면의 각 모서리에 표시합니다.
콘텐츠 표시
컨트롤의 두 번째 인수는 콘텐츠입니다. 텍스트를 표시할 때는 문자열을 사용하고, 이미지를 표시할 때는 Texture2D
유형의 변수를 사용합니다.
텍스트 레이블 예제
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour {
void OnGUI () {
GUI.Label (new Rect (0,0,100,50), "This is the text string for a Label Control");
}
}
이미지 레이블 예제
public Texture2D controlTexture;
void OnGUI () {
GUI.Label (new Rect (0,0,100,50), controlTexture);
}
버튼 생성 예제
아래는 버튼을 품질적으로 활용한 예제입니다.
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour {
public Texture2D icon;
void OnGUI () {
if (GUI.Button (new Rect (10,10, 100, 50), icon)) {
print ("you clicked the icon");
}
if (GUI.Button (new Rect (10,70, 100, 20), "This is text")) {
print ("you clicked the text button");
}
}
}
GUIContent 사용
GUIContent
오브젝트를 활용하여 텍스트, 이미지 및 툴팁을 함께 표시할 수 있습니다.
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour {
public Texture2D icon;
void OnGUI () {
GUI.Box (new Rect (10,10,100,50), new GUIContent("This is text", icon));
}
}
위 코드는 버튼에 텍스트와 이미지를 함께 표시하게 해줍니다.
마무리
이 문서에서는 유니티의 IMGUI 시스템을 사용해 간단한 GUI 요소를 만드는 방법을 배웠습니다. IMGUI는 사용자에게 다양한 UI 요소를 쉽게 생성하고 조작할 수 있는 기능을 제공합니다. 실제로 이 구조를 사용하여 자신만의 UI를 설계할 수 있도록 연습해보세요.