#nullable enable using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using UVC.UIToolkit; /// /// UTKMultiSelectDropdown 컴포넌트 샘플 /// UXML 파일을 로드하여 쿼리 방식으로 사용하는 예제 /// [RequireComponent(typeof(UIDocument))] public class UTKMultiSelectDropdownSample : MonoBehaviour { #region Enums /// 게임 난이도 public enum Difficulty { Easy, Normal, Hard, Expert } /// 품질 설정 public enum QualityLevel { Low, Medium, High, Ultra } /// 파일 형식 public enum FileFormat { PNG, JPG, GIF, BMP, TIFF } /// 정렬 방식 public enum SortOrder { Ascending, Descending } #endregion #region Fields [SerializeField] [Tooltip("UI를 표시할 UIDocument 컴포넌트")] public UIDocument? _uiDocument; [SerializeField] [Tooltip("시작 시 적용할 테마")] private UTKTheme initialTheme = UTKTheme.Dark; private UTKToggle _themeToggle; private VisualElement? _root; // 다중 선택 드롭다운 참조 private UTKMultiSelectDropdown? _dropdownBasic; private UTKMultiSelectDropdown? _dropdownDefault; private UTKMultiSelectDropdown? _dropdownCategory; private UTKMultiSelectDropdown? _dropdownTag; private UTKMultiSelectDropdown? _dropdownSelectAll; private UTKMultiSelectDropdown? _dropdownDisabled; // 다중 선택 결과 라벨 참조 private Label? _resultBasic; private Label? _resultDefault; private Label? _resultCategory; private Label? _resultTag; private Label? _resultSelectAll; // 버튼 참조 private UTKButton? _btnSelectAll; private UTKButton? _btnClear; // 단일 선택 드롭다운 참조 private UTKDropdown? _dropdownSingleBasic; private UTKDropdown? _dropdownSingleDefault; private UTKDropdown? _dropdownSingleSort; private UTKDropdown? _dropdownSingleDisabled; // 단일 선택 결과 라벨 참조 private Label? _dropdownResultBasic; private Label? _dropdownResultDefault; private Label? _dropdownResultSort; // Enum 드롭다운 참조 private UTKEnumDropDown? _enumDropdownDifficulty; private UTKEnumDropDown? _enumDropdownQuality; private UTKEnumDropDown? _enumDropdownFormat; private UTKEnumDropDown? _enumDropdownDisabled; // Enum 결과 라벨 참조 private Label? _enumResultDifficulty; private Label? _enumResultQuality; private Label? _enumResultFormat; #endregion #region Unity Lifecycle private void Start() { var doc = GetComponent(); if (doc == null) { Debug.LogError("UIDocument가 할당되지 않았습니다."); return; } _uiDocument = doc; var toggle = _uiDocument.rootVisualElement.Q("toggle"); if (toggle == null) { Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다."); return; } _themeToggle = toggle; UTKThemeManager.Instance.RegisterRoot(_uiDocument.rootVisualElement); UTKThemeManager.Instance.SetTheme(initialTheme); _themeToggle.OnValueChanged += (isOn) => { UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light); }; LoadUIFromUXML(); } private void OnDestroy() { UnregisterEvents(); } #endregion #region Setup private void LoadUIFromUXML() { // UIDocument 참조 확인 var doc = GetComponent(); if (doc == null) { Debug.LogError("UIDocument가 할당되지 않았습니다."); return; } _uiDocument = doc; // UI 생성 _root = _uiDocument.rootVisualElement; // 요소 쿼리 QueryElements(); // 초기 설정 SetupInitialValues(); // 이벤트 등록 RegisterEvents(); } private void QueryElements() { if (_root == null) return; // 다중 선택 드롭다운 쿼리 _dropdownBasic = _root.Q("dropdown-basic"); _dropdownDefault = _root.Q("dropdown-default"); _dropdownCategory = _root.Q("dropdown-category"); _dropdownTag = _root.Q("dropdown-tag"); _dropdownSelectAll = _root.Q("dropdown-selectall"); _dropdownDisabled = _root.Q("dropdown-disabled"); // 다중 선택 결과 라벨 쿼리 _resultBasic = _root.Q