Unity/UI ToolKit
UXML 및 USS C# 스크립트 로드 방법
소나무꼴
2025. 5. 11. 21:57
Unity에서는 UXML 파일을 VisualTreeAsset, USS 파일을 StyleSheet 객체로 표현합니다.
이들은 Unity 에셋이기 때문에 일반적인 에셋 로딩 방식(직렬화 참조, Resources.Load, Addressables, AssetDatabase)을 사용할 수 있습니다.
1. 🔗 직렬화 참조 사용 (Inspector에서 직접 할당)
✔ 사용하는 경우
- MonoBehaviour, ScriptableObject, EditorWindow 등의 클래스에서 사용 가능
- Unity Inspector에서 참조를 드래그하여 연결
✔ 예제
using UnityEngine;
using UnityEngine.UIElements;
public class MyBehaviour : MonoBehaviour
{
public VisualTreeAsset mainUI;
public StyleSheet[] seasonalThemes;
}
using UnityEditor;
using UnityEngine.UIElements;
public class MyWindow : EditorWindow
{
[SerializeField] private VisualTreeAsset uxml;
[SerializeField] private StyleSheet uss;
}
2. 📦 Resources 폴더 사용
런타임 로딩 가능, 하지만 빌드 크기 증가 주의
✔ 경로: Assets/Resources/
✔ 예제
VisualTreeAsset uxml = Resources.Load<VisualTreeAsset>("main_window");
StyleSheet uss = Resources.Load<StyleSheet>("main_styles");
3. 🎯 Addressables 사용
런타임 로딩 가능, 빌드 최적화 및 메모리 관리에 유리
✔ 예제
// 비동기 로드 (예시)
var handle = Addressables.LoadAssetAsync<VisualTreeAsset>("main_window");
handle.Completed += (op) =>
{
if (op.Status == AsyncOperationStatus.Succeeded)
{
VisualTreeAsset uxml = op.Result;
// 사용 가능
}
};
4. 🛠️ AssetDatabase 사용 (에디터 전용)
에디터 도구 제작 시 사용
✔ 예제
using UnityEditor;
using UnityEngine.UIElements;
VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/main_window.uxml");
StyleSheet uss = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/main_styles.uss");