UTKProperyWIndow 수정 중

This commit is contained in:
logonkhi
2026-02-02 19:33:27 +09:00
parent f2d0f3d423
commit 297ca29082
118 changed files with 3043 additions and 1924 deletions

View File

@@ -166,7 +166,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 9d3024917e8d4b546943ec3f7b03d9e4, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: 3cdfb535a2976ab48975316e1f7196d9, type: 3}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1

View File

@@ -25,12 +25,19 @@ public class UTKAccordionListWindowSample : MonoBehaviour
[Tooltip("UI를 표시할 UIDocument 컴포넌트")]
public UIDocument? uiDocument;
[SerializeField]
[Tooltip("드래그 시 고스트 이미지 표시 여부")]
private bool showDragGhost = true;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
/// <summary>UTKAccordionListWindow 인스턴스</summary>
private UTKAccordionListWindow? _accordionWindow;
private UTKAccordionListWindow _accordionWindow;
/// <summary>드롭 위치 (스크린 좌표)</summary>
private Vector2 _lastDropScreenPosition;
@@ -44,6 +51,8 @@ public class UTKAccordionListWindowSample : MonoBehaviour
/// <summary>드래그 중 리스트 영역 밖에 있는지 여부</summary>
private bool _isOutsideListArea;
#endregion
#region Unity
@@ -51,30 +60,49 @@ public class UTKAccordionListWindowSample : MonoBehaviour
private void Start()
{
// UIDocument 참조 확인
uiDocument ??= GetComponent<UIDocument>();
if (uiDocument == null)
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogError("[UTKAccordionListWindowSample] UIDocument가 할당되지 않았습니다.");
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
uiDocument = doc;
var toggle = uiDocument.rootVisualElement.Q<UTKToggle>("toggle");
if (toggle == null)
{
Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
return;
}
_themeToggle = toggle;
var window = uiDocument.rootVisualElement.Q<UTKAccordionListWindow>("window");
if (window == null)
{
Debug.LogError("UXML에서 UTKAccordionListWindow를 찾을 수 없습니다.");
return;
}
_accordionWindow = window;
UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
UTKThemeManager.Instance.SetTheme(initialTheme);
_themeToggle.OnValueChanged += (isOn) =>
{
UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
};
// UTKAccordionListWindow 인스턴스 생성 및 추가
_accordionWindow = new UTKAccordionListWindow();
_accordionWindow.ShowDragGhost = showDragGhost;
_accordionWindow.Title = "ACCORDION";
_accordionWindow.ShowCloseButton = true;
uiDocument.rootVisualElement.Add(_accordionWindow);
// 테스트 데이터 생성
CreateTestData();
// 이벤트 핸들러 등록
RegisterEventHandlers();
// 윈도우 표시
_accordionWindow.Show();
Debug.Log("[UTKAccordionListWindowSample] 초기화 완료");
}

View File

@@ -0,0 +1,6 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKAccordionListWindow name="window" />
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; right: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 3cdfb535a2976ab48975316e1f7196d9
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -166,7 +166,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 5ad0294e546cb18409d368046997e670, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: 16e3bccfa967f4249856b24387b10b0a, type: 3}
m_SortingOrder: 1
m_Position: 0
m_WorldSpaceSizeMode: 1
@@ -188,6 +188,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKColorPickerSample
_uiDocument: {fileID: 1097328754}
initialTheme: 0
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0

View File

@@ -15,6 +15,12 @@ namespace UVC.Sample.UIToolkit
{
[SerializeField] private UIDocument? _uiDocument;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
private VisualElement? _root;
private VisualElement? _colorPreview;
private Label? _colorLabel;
@@ -25,11 +31,30 @@ namespace UVC.Sample.UIToolkit
private void Start()
{
if (_uiDocument == null)
// UIDocument 참조 확인
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogError("UIDocument is not assigned!");
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
_uiDocument = doc;
var toggle = _uiDocument.rootVisualElement.Q<UTKToggle>("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);
};
_root = _uiDocument.rootVisualElement;
CreateSampleUI();

View File

@@ -0,0 +1,5 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; right: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 16e3bccfa967f4249856b24387b10b0a
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -131,7 +131,7 @@ GameObject:
- component: {fileID: 1097328754}
- component: {fileID: 1097328755}
m_Layer: 0
m_Name: UTKComponentListWindowSample
m_Name: Sample
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -166,7 +166,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 9d3024917e8d4b546943ec3f7b03d9e4, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: ac1b05d63bb20cd468b39a2802e42701, type: 3}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1
@@ -188,6 +188,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKComponentListWindowSample
uiDocument: {fileID: 1097328754}
initialTheme: 0
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0

View File

@@ -12,36 +12,71 @@ public class UTKComponentListWindowSample : MonoBehaviour
[SerializeField]
public UIDocument uiDocument;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
private UTKComponentListWindow listWindow;
private UTKComponentTabListWindow tabListWindow;
void Start()
{
uiDocument ??= GetComponent<UIDocument>();
// UIDocument 참조 확인
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
uiDocument = doc;
var toggle = uiDocument.rootVisualElement.Q<UTKToggle>("toggle");
if (toggle == null)
{
Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
return;
}
_themeToggle = toggle;
// UTKComponentTabListWindow 사용 (탭 기능 포함)
tabListWindow = new UTKComponentTabListWindow();
tabListWindow.style.marginLeft = 500;
uiDocument.rootVisualElement.Add(tabListWindow);
var window = uiDocument.rootVisualElement.Q<UTKComponentListWindow>("window");
if (window == null)
{
Debug.LogError("UXML에서 UTKComponentListWindow를 찾을 수 없습니다.");
return;
}
listWindow = window;
// 테스트용 계층적 트리 데이터 생성
CreateTabListTestData();
var tabWindow = uiDocument.rootVisualElement.Q<UTKComponentTabListWindow>("tabWindow");
if (tabWindow == null)
{
Debug.LogError("UXML에서 UTKComponentTabListWindow를 찾을 수 없습니다.");
return;
}
tabListWindow = tabWindow;
UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
UTKThemeManager.Instance.SetTheme(initialTheme);
_themeToggle.OnValueChanged += (isOn) =>
{
UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
};
// 이벤트 핸들러 등록
RegisterTabListEventHandlers();
// 테스트용 계층적 트리 데이터 생성
CreateTabListTestData();
// UTKComponentListWindow 사용 (기본)
listWindow = new UTKComponentListWindow();
uiDocument.rootVisualElement.Add(listWindow);
// 이벤트 핸들러 등록
RegisterTabListEventHandlers();
// 테스트용 계층적 트리 데이터 생성
CreateTestData();
// 테스트용 계층적 트리 데이터 생성
CreateTestData();
// 이벤트 핸들러 등록
RegisterEventHandlers();
// 이벤트 핸들러 등록
RegisterEventHandlers();
}

View File

@@ -0,0 +1,7 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKComponentListWindow name="window" />
<utk:UTKComponentTabListWindow name="tabWindow" style="position: absolute; top: 0; left: 400px;" />
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; right: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: ac1b05d63bb20cd468b39a2802e42701
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -166,7 +166,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 5ad0294e546cb18409d368046997e670, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: 532efe3b9768cdf4e86046f72462a043, type: 3}
m_SortingOrder: 10
m_Position: 0
m_WorldSpaceSizeMode: 1
@@ -188,6 +188,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKDatePickerSample
_uiDocument: {fileID: 1097328754}
initialTheme: 0
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0

View File

@@ -16,6 +16,12 @@ namespace UVC.Sample.UIToolkit
{
[SerializeField] private UIDocument? _uiDocument;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
private VisualElement? _root;
private Label? _dateLabel;
private Label? _dateTimeLabel;
@@ -29,11 +35,30 @@ namespace UVC.Sample.UIToolkit
private void Start()
{
if (_uiDocument == null)
// UIDocument 참조 확인
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogError("UIDocument is not assigned!");
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
_uiDocument = doc;
var toggle = _uiDocument.rootVisualElement.Q<UTKToggle>("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);
};
bool success = LocalizationManager.Instance.LoadDefaultLocalizationData("ko", "locale.json");
Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");

View File

@@ -0,0 +1,5 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; right: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 532efe3b9768cdf4e86046f72462a043
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -166,7 +166,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 9d3024917e8d4b546943ec3f7b03d9e4, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: 5b85ca454c8b3e8408b994aa6e24b2d0, type: 3}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1

View File

@@ -28,6 +28,12 @@ public class UTKImageListWindowSample : MonoBehaviour
[Tooltip("드래그 시 이미지가 커서를 따라다니도록 설정")]
private bool dragImageFollowCursor = true;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
/// <summary>UTKImageListWindow 인스턴스</summary>
private UTKImageListWindow? _imageListWindow;
@@ -50,20 +56,42 @@ public class UTKImageListWindowSample : MonoBehaviour
private void Start()
{
// UIDocument 참조 확인
uiDocument ??= GetComponent<UIDocument>();
if (uiDocument == null)
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogError("[UTKImageListWindowSample] UIDocument가 할당되지 않았습니다.");
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
uiDocument = doc;
var toggle = uiDocument.rootVisualElement.Q<UTKToggle>("toggle");
if (toggle == null)
{
Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
return;
}
_themeToggle = toggle;
var window = uiDocument.rootVisualElement.Q<UTKImageListWindow>("window");
if (window == null)
{
Debug.LogError("UXML에서 UTKImageListWindow를 찾을 수 없습니다.");
return;
}
_imageListWindow = window;
// UTKImageListWindow 인스턴스 생성 및 추가
_imageListWindow = new UTKImageListWindow();
_imageListWindow.DragImageFollowCursor = dragImageFollowCursor;
_imageListWindow.Title = "LIBRARY";
_imageListWindow.ShowCloseButton = true;
uiDocument.rootVisualElement.Add(_imageListWindow);
UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
UTKThemeManager.Instance.SetTheme(initialTheme);
_themeToggle.OnValueChanged += (isOn) =>
{
UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
};
// 테스트 데이터 생성
CreateTestData();

View File

@@ -0,0 +1,6 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKImageListWindow name="window" />
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; right: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 5b85ca454c8b3e8408b994aa6e24b2d0
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -166,7 +166,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 9d3024917e8d4b546943ec3f7b03d9e4, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: ad778edbbf3d39349bcbcefeb341584c, type: 3}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1
@@ -188,6 +188,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UVC.Sample.UIToolkit.UTKPropertyWindowSample
_uiDocument: {fileID: 1097328754}
initialTheme: 0
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0

View File

@@ -13,17 +13,50 @@ namespace UVC.Sample.UIToolkit
/// </summary>
public class UTKPropertyWindowSample : MonoBehaviour
{
[SerializeField] private UIDocument? _uiDocument;
[SerializeField] private UIDocument _uiDocument;
private UTKPropertyWindow? _propertyWindow;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
private UTKPropertyWindow _propertyWindow;
private void Start()
{
if (_uiDocument == null)
// UIDocument 참조 확인
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogError("UIDocument is not assigned!");
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
_uiDocument = doc;
var toggle = _uiDocument.rootVisualElement.Q<UTKToggle>("toggle");
if (toggle == null)
{
Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
return;
}
_themeToggle = toggle;
var window = _uiDocument.rootVisualElement.Q<UTKPropertyWindow>("window");
if (window == null)
{
Debug.LogError("UXML에서 UTKPropertyWindow를 찾을 수 없습니다.");
return;
}
_propertyWindow = window;
UTKThemeManager.Instance.RegisterRoot(_uiDocument.rootVisualElement);
UTKThemeManager.Instance.SetTheme(initialTheme);
_themeToggle.OnValueChanged += (isOn) =>
{
UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
};
var root = _uiDocument.rootVisualElement;
CreateSamplePropertyWindow(root);
@@ -31,7 +64,6 @@ namespace UVC.Sample.UIToolkit
private void CreateSamplePropertyWindow(VisualElement root)
{
_propertyWindow = new UTKPropertyWindow("Sample Properties");
// 세로 높이를 부모에 맞게 꽉 채우기
_propertyWindow.style.position = Position.Absolute;
@@ -47,7 +79,7 @@ namespace UVC.Sample.UIToolkit
_propertyWindow.OnPropertyValueChanged += args =>
{
Debug.Log($"Property Changed: {args.PropertyName} ({args.PropertyType}) = {args.NewValue}");
Debug.Log($"Property Changed: {args.PropertyId} {args.PropertyName} ({args.PropertyType}) = {args.NewValue}");
};
// 샘플 데이터 생성

View File

@@ -0,0 +1,6 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKPropertyWindow name="window" />
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; left: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: ad778edbbf3d39349bcbcefeb341584c
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -555,6 +555,45 @@ slider.IsEnabled = false;",
<!-- 비활성화 -->
<utk:UTKSlider label=""잠금"" is-enabled=""false"" value=""30"" />
</ui:UXML>");
}
private void InitializeSliderIntSample(VisualElement root)
{
SetCodeSamples(root,
csharpCode: @"// 기본 정수 슬라이더
var slider = new UTKSliderInt();
slider.label = ""레벨""; // Unity SliderInt의 label 프로퍼티 (소문자)
slider.lowValue = 1;
slider.highValue = 10;
slider.value = 5;
slider.OnValueChanged += (value) => Debug.Log($""레벨: {value}"");
// 생성자로 생성
var levelSlider = new UTKSliderInt(""레벨"", 1, 10, 5);
// 수량 슬라이더
var quantitySlider = new UTKSliderInt(""수량"", 0, 100, 25);
quantitySlider.OnValueChanged += (value) => Debug.Log($""수량: {value}"");
// 페이지 선택
var pageSlider = new UTKSliderInt(""페이지"", 1, 100, 1);
pageSlider.OnValueChanged += (page) => LoadPage(page);
// 비활성화
slider.IsEnabled = false;",
uxmlCode: @"<!-- 네임스페이스 선언 -->
<ui:UXML xmlns:utk=""UVC.UIToolkit"">
<!-- 기본 정수 슬라이더 -->
<utk:UTKSliderInt label=""레벨"" low-value=""1"" high-value=""10"" value=""5"" />
<!-- 큰 범위 -->
<utk:UTKSliderInt label=""수량"" low-value=""0"" high-value=""100"" value=""25"" />
<!-- 비활성화 -->
<utk:UTKSliderInt label=""잠금"" is-enabled=""false"" value=""30"" />
</ui:UXML>");
}

View File

@@ -70,6 +70,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
["UTKNumberStepper"] = "UIToolkit/Sample/Input/UTKNumberStepperSample",
// Slider
["UTKSlider"] = "UIToolkit/Sample/Slider/UTKSliderSample",
["UTKSliderInt"] = "UIToolkit/Sample/Slider/UTKSliderIntSample",
["UTKMinMaxSlider"] = "UIToolkit/Sample/Slider/UTKMinMaxSliderSample",
["UTKProgressBar"] = "UIToolkit/Sample/Slider/UTKProgressBarSample",
// Dropdown
@@ -110,7 +111,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
["Icon"] = new[] { "UTKMaterialIcons", "UTKImageIcons", "UTKImage" },
["Button"] = new[] { "UTKButton", "UTKCheckBox", "UTKToggle", "UTKRadioButton", "UTKToggleButtonGroup" },
["Input"] = new[] { "UTKInputField", "UTKIntegerField", "UTKLongField", "UTKFloatField", "UTKDoubleField", "UTKVector2Field", "UTKVector3Field", "UTKVector4Field", "UTKRectField", "UTKBoundsField", "UTKNumberStepper" },
["Slider"] = new[] { "UTKSlider", "UTKMinMaxSlider", "UTKProgressBar" },
["Slider"] = new[] { "UTKSlider", "UTKSliderInt", "UTKMinMaxSlider", "UTKProgressBar" },
["Dropdown"] = new[] { "UTKDropdown", "UTKEnumDropDown" },
["Label"] = new[] { "UTKLabel", "UTKHelpBox" },
["List"] = new[] { "UTKListView", "UTKTreeView", "UTKMultiColumnListView", "UTKMultiColumnTreeView", "UTKFoldout", "UTKScrollView" },
@@ -468,6 +469,9 @@ public partial class UTKStyleGuideSample : MonoBehaviour
case "UTKSlider":
InitializeSliderSample(root);
break;
case "UTKSliderInt":
InitializeSliderIntSample(root);
break;
case "UTKMinMaxSlider":
InitializeMinMaxSliderSample(root);
break;

View File

@@ -131,7 +131,7 @@ GameObject:
- component: {fileID: 1097328754}
- component: {fileID: 1097328753}
m_Layer: 0
m_Name: UTKTreeListWindowSample
m_Name: Sample
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -165,6 +165,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKTreeListWindowSample
uiDocument: {fileID: 1097328754}
initialTheme: 0
--- !u!114 &1097328754
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -179,7 +180,7 @@ MonoBehaviour:
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
m_ParentUI: {fileID: 0}
sourceAsset: {fileID: 9197481963319205126, guid: 9d3024917e8d4b546943ec3f7b03d9e4, type: 3}
sourceAsset: {fileID: 9197481963319205126, guid: 775bcf7c96049ed4798a80a09093b776, type: 3}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1

View File

@@ -12,23 +12,49 @@ public class UTKTreeListWindowSample : MonoBehaviour
[SerializeField]
public UIDocument uiDocument;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
private UTKToggle _themeToggle;
private UTKTreeListWindow treeListWindow;
void Start()
{
uiDocument ??= GetComponent<UIDocument>();
// UIDocument에서 UTKTreeListWindow 인스턴스 생성해서 할당
treeListWindow = new UTKTreeListWindow();
uiDocument.rootVisualElement.Add(treeListWindow);
// UTKTreeListWindow가 할당되지 않은 경우 경고
if (treeListWindow == null)
// UIDocument 참조 확인
var doc = GetComponent<UIDocument>();
if (doc == null)
{
Debug.LogWarning("[UTKTreeListWindowSample] treeListWindow가 할당되지 않았습니다.");
Debug.LogError("UIDocument가 할당되지 않았습니다.");
return;
}
uiDocument = doc;
var toggle = uiDocument.rootVisualElement.Q<UTKToggle>("toggle");
if (toggle == null)
{
Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
return;
}
_themeToggle = toggle;
var window = uiDocument.rootVisualElement.Q<UTKTreeListWindow>("window");
if (window == null)
{
Debug.LogError("UXML에서 UTKTreeListWindow를 찾을 수 없습니다.");
return;
}
treeListWindow = window;
UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
UTKThemeManager.Instance.SetTheme(initialTheme);
_themeToggle.OnValueChanged += (isOn) =>
{
UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
};
// 테스트용 계층적 트리 데이터 생성
CreateTestData();

View File

@@ -0,0 +1,6 @@
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
<VisualElement style="width: 100%; height: 100%;">
<utk:UTKTreeListWindow name="window" />
<utk:UTKToggle name="toggle" label="테마 변경" style="position: absolute; top: 10px; right: 10px;" />
</VisualElement>
</UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 775bcf7c96049ed4798a80a09093b776
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}