#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