Unity 매뉴얼: UXML 요소 및 C# 클래스 개요
이 문서는 Unity에서 사용자 인터페이스(UI)를 만들 때 사용하는 UXML 요소와 C# 클래스를 다룹니다. 주로 InspectorElement
클래스를 중심으로 설명하며, 기본 속성과 활용에 대해서도 알아보겠습니다.
UXML 요소란?
UXML은 Unity에서 XML 형식으로 UI를 정의하는 방법입니다. 요소들은 UI 구성 요소를 나타내며, 각 요소는 특정 속성을 가집니다. 아래는 InspectorElement
클래스의 주요 속성입니다.
InspectorElement 속성
속성명 | 타입 | 설명 |
---|---|---|
binding-path | string | 바인딩될 타겟 프로퍼티의 경로입니다. |
focusable | boolean | 요소에 포커스를 맞출 수 있으면 true입니다. |
tabindex | int | 포커스를 정렬하는 데 사용되는 정수 (0 이상). |
content-container | string | 자식 요소가 추가되는 곳으로, 일반적으로 요소 자체와 동일합니다. |
name | string | VisualElement의 이름. 이 이름으로 USS 선택자를 작성할 수 있습니다. |
picking-mode | UIElements.PickingMode | 요소를 선택할 수 있는지를 결정합니다. |
style | string | 요소의 스타일 오브젝트에 대한 레퍼런스입니다. |
tooltip | string | 마우스를 요소 위에 올렸을 때 표시할 텍스트입니다. |
usage-hints | UIElements.UsageHints | 요소의 고수준 사용 패턴을 지정합니다. |
view-data-key | string | 보기 데이터 지속성을 위한 키로 사용됩니다. |
C# 클래스 및 USS 선택자
UXML의 각 클래스는 특정 USS 스타일을 가집니다. 아래는 InspectorElement
클래스와 관련된 USS 선택자 표입니다.
C# 프로퍼티 | USS 선택자 | 설명 |
---|---|---|
ussClassName | .unity-inspector-element | 타입 요소의 USS 클래스명입니다. |
customInspectorUssClassName | .unity-inspector-element__custom-inspector-container | 커스텀 인스펙터 요소의 USS 클래스명입니다. |
iMGUIContainerUssClassName | .unity-inspector-element__imgui-container | IMGUI 컨테이너의 USS 클래스명입니다. |
iMGUIInspectorVariant | .unity-inspector-element--imgui | IMGUI 인스펙터 모드에서 표시될 때의 USS 클래스명 |
uIEInspectorVariant | .unity-inspector-element--uie | UIElements 인스펙터 모드에서의 USS 클래스명 |
noInspectorFoundVariant | .unity-inspector-element--no-inspector-found | 인스펙터가 없을 경우의 USS 클래스명 |
uIECustomVariant | .unity-inspector-element--uie-custom | UIElements 커스텀 모드의 USS 클래스명 |
iMGUICustomVariant | .unity-inspector-element--imgui-custom | IMGUI 커스텀 모드의 USS 클래스명 |
iMGUIDefaultVariant | .unity-inspector-element--imgui-default | IMGUI 기본 모드의 USS 클래스명 |
uIEDefaultVariant | .unity-inspector-element--uie-default | UIElements 기본 모드의 USS 클래스명 |
debugVariant | .unity-inspector-element--debug | 디버그 모드의 USS 클래스명 |
debugInternalVariant | .unity-inspector-element--debug-internal | 디버그 내부 모드의 USS 클래스명 |
disabledUssClassName | .unity-disabled | 비활성화된 요소의 USS 클래스명 |
활용 및 응용 예제
Unity에서 UXML과 InspectorElement
를 활용하는 방법은 다양합니다.
예제 1: 사용자 정의 인스펙터 생성하기
기본적인 인스펙터 UI를 커스텀할 때, UXML을 이용해 UI 요소를 구성할 수 있습니다.
using UnityEngine;
using UnityEditor;
using UnityEngine.UIElements;
public class CustomInspectorExample : Editor
{
public override VisualElement CreateInspectorGUI()
{
// UXML 파일 로드
var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/MyCustomInspector.uxml");
VisualElement root = visualTree.CloneTree();
// 속성 바인딩
var targetProperty = serializedObject.FindProperty("targetProperty");
var myField = root.Q<IntegerField>("myField");
myField.BindProperty(targetProperty);
return root;
}
}
위 예제는 Custom Inspector를 만들어 특정 속성을 바인딩하는 방법을 보여줍니다.
예제 2: UI 스타일 적용하기
USS 파일을 사용하여 UI 요소의 스타일을 어떻게 지정할 수 있는지 다음과 같이 예를 들 수 있습니다.
using UnityEngine;
using UnityEngine.UIElements;
public class StyleExample : MonoBehaviour
{
void Start()
{
var visualElement = new VisualElement();
visualElement.AddToClassList("custom-element"); // CSS 클래스 추가
visualElement.style.width = 100; // 스타일 속성 지정
visualElement.style.height = 50;
}
}
위 코드 조각은 custom-element
라는 CSS 클래스를 추가하여 UI 요소의 스타일을 적용하는 방법을 보여줍니다.
결론
UXML과 C# 클래스를 활용하여 Unity에서 다양한 UI 요소를 구성하고, 사용자 정의 인스펙터를 만드는 등 여러 방법으로 활용할 수 있습니다. 이 문서에서 소개한 내용은 간단한 예제일 뿐이며, 여러분의 프로젝트에 맞게 확장하여 적용할 수 있습니다.