Unity IMGUI를 이용한 복합 컨트롤 생성하기
Unity에서는 IMGUI(Immediate Mode GUI)를 사용하여 사용자 인터페이스(UI)를 만들 수 있습니다. 이 문서는 IMGUI 시스템을 통해 복합 컨트롤을 생성하는 방법에 대해 설명합니다. 복합 컨트롤을 통해 다양한 GUI 요소를 조합하여 보다 직관적인 사용자 경험을 제공할 수 있습니다.
기본 복합 컨트롤 생성
IMGUI를 사용하면 여러 개의 UI 요소를 조합해 복합 컨트롤을 만들 수 있습니다. 예를 들어, 레이블과 슬라이더를 함께 조합하여 사용자가 값을 쉽게 조정할 수 있도록 할 수 있습니다.
코드 예제: 레이블과 슬라이더 조합하기
using UnityEngine;
public class GUITest : MonoBehaviour {
private float mySlider = 1.0f;
void OnGUI () {
mySlider = LabelSlider(new Rect(10, 100, 100, 20), mySlider, 5.0f, "Label text here");
}
float LabelSlider(Rect screenRect, float sliderValue, float sliderMaxValue, string labelText) {
GUI.Label(screenRect, labelText);
screenRect.x += screenRect.width; // 레이블 끝으로 슬라이더 이동
sliderValue = GUI.HorizontalSlider(screenRect, sliderValue, 0.0f, sliderMaxValue);
return sliderValue;
}
}
설명
OnGUI
메서드는 매 프레임마다 호출되어 UI를 그립니다.LabelSlider
함수는 레이블과 슬라이더를 받아 처리합니다.
정적 복합 컨트롤
복합 컨트롤을 공유하기 위해 정적 메서드를 사용할 수 있습니다. 이를 통해 여러 스크립트에서 같은 기능을 재사용할 수 있습니다.
코드 예제: 정적 복합 컨트롤
using UnityEngine;
public class CompoundControls : MonoBehaviour {
public static float LabelSlider(Rect screenRect, float sliderValue, float sliderMaxValue, string labelText) {
GUI.Label(screenRect, labelText);
screenRect.x += screenRect.width; // 레이블 끝으로 슬라이더 이동
sliderValue = GUI.HorizontalSlider(screenRect, sliderValue, 0.0f, sliderMaxValue);
return sliderValue;
}
}
설명
LabelSlider
메서드는 클래스에 정적으로 선언되어 언제든지 호출할 수 있습니다.
RGB 슬라이더 만들기
RGB 색상을 조정할 수 있는 슬라이더를 만들어 보겠습니다. 이 복합 컨트롤은 각 색상 성분(R, G, B)을 개별적으로 조정할 수 있게 해줍니다.
코드 예제: RGB 슬라이더
using UnityEngine;
public class GUITest : MonoBehaviour {
public Color myColor;
void OnGUI () {
myColor = RGBSlider(new Rect(10, 10, 200, 10), myColor);
}
Color RGBSlider(Rect screenRect, Color rgb) {
rgb.r = GUI.HorizontalSlider(screenRect, rgb.r, 0.0f, 1.0f);
screenRect.y += 20; // 다음 슬라이더 위치 조정
rgb.g = GUI.HorizontalSlider(screenRect, rgb.g, 0.0f, 1.0f);
screenRect.y += 20; // 다음 슬라이더 위치 조정
rgb.b = GUI.HorizontalSlider(screenRect, rgb.b, 0.0f, 1.0f);
return rgb;
}
}
설명
RGBSlider
함수는 각각의 RGB 슬라이더를 그리고 색상 값을 조정합니다.
복합 슬라이더에 레이블 추가하기
RGB 슬라이더의 기능을 확장하여 각 슬라이더에 레이블을 추가할 수 있습니다. 이를 통해 사용자에게 어떤 색상 성분을 조정하는지 알려줄 수 있습니다.
코드 예제: RGB 레이블 슬라이더
using UnityEngine;
public class GUITest : MonoBehaviour {
public Color myColor;
void OnGUI () {
myColor = RGBLabelSlider(new Rect(10, 10, 200, 30), myColor);
}
Color RGBLabelSlider(Rect screenRect, Color rgb) {
rgb.r = CompoundControls.LabelSlider(screenRect, rgb.r, 1.0f, "Red");
screenRect.y += 20; // 다음 슬라이더 위치 조정
rgb.g = CompoundControls.LabelSlider(screenRect, rgb.g, 1.0f, "Green");
screenRect.y += 20; // 다음 슬라이더 위치 조정
rgb.b = CompoundControls.LabelSlider(screenRect, rgb.b, 1.0f, "Blue");
return rgb;
}
}
설명
- 새로운
RGBLabelSlider
함수는 각각의 슬라이더에 레이블을 포함하여 사용자에게 명확한 피드백을 제공합니다.
결론
Unity의 IMGUI 시스템을 활용하면 직관적이고 복잡한 UI 요소를 쉽게 구축할 수 있습니다. 위의 예제코드를 참고하여 다양한 UI 컨트롤을 만들고, 사용자 경험을 개선하기 위한 방법을 모색해보세요. IMGUI를 통해 보다 유연한 UI 설계를 할 수 있습니다.