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 요소를 구성하고, 사용자 정의 인스펙터를 만드는 등 여러 방법으로 활용할 수 있습니다. 이 문서에서 소개한 내용은 간단한 예제일 뿐이며, 여러분의 프로젝트에 맞게 확장하여 적용할 수 있습니다.