diff --git a/Assets/Editor/FixMCPEditorPrefs.cs b/Assets/Editor/FixMCPEditorPrefs.cs
new file mode 100644
index 00000000..5b588a9a
--- /dev/null
+++ b/Assets/Editor/FixMCPEditorPrefs.cs
@@ -0,0 +1,148 @@
+#nullable enable
+using UnityEditor;
+using UnityEngine;
+
+///
+/// MCP for Unity EditorPrefs 설정 확인 및 수정 도구
+///
+public static class FixMCPEditorPrefs
+{
+ private const string GitUrlOverrideKey = "MCPForUnity.GitUrlOverride";
+
+ [MenuItem("Tools/MCP/Fix EditorPrefs Issue")]
+ public static void FixEditorPrefs()
+ {
+ Debug.Log("=== MCP EditorPrefs 확인 시작 ===");
+
+ // 현재 저장된 값 확인
+ string currentValue = EditorPrefs.GetString(GitUrlOverrideKey, "");
+
+ Debug.Log($"현재 GitUrlOverride 값: '{currentValue}'");
+ Debug.Log($"값 길이: {currentValue.Length}");
+
+ if (!string.IsNullOrEmpty(currentValue))
+ {
+ // 잘못된 문자가 있는지 확인
+ char[] invalidChars = System.IO.Path.GetInvalidPathChars();
+ bool hasInvalidChars = currentValue.IndexOfAny(invalidChars) >= 0;
+
+ if (hasInvalidChars)
+ {
+ Debug.LogWarning($"⚠️ 잘못된 경로 문자가 감지되었습니다!");
+ Debug.LogWarning($"문제가 있는 값: '{currentValue}'");
+
+ // 잘못된 값 제거
+ EditorPrefs.DeleteKey(GitUrlOverrideKey);
+ Debug.Log("✅ 잘못된 EditorPrefs 값을 제거했습니다.");
+ }
+ else
+ {
+ Debug.Log("경로 문자 검증: 정상");
+
+ // Path.IsPathRooted() 테스트
+ try
+ {
+ bool isRooted = System.IO.Path.IsPathRooted(currentValue);
+ Debug.Log($"IsPathRooted 테스트: {isRooted} (정상)");
+ }
+ catch (System.Exception ex)
+ {
+ Debug.LogError($"❌ IsPathRooted 호출 실패: {ex.Message}");
+ Debug.LogWarning("잘못된 값을 제거합니다...");
+ EditorPrefs.DeleteKey(GitUrlOverrideKey);
+ Debug.Log("✅ 잘못된 EditorPrefs 값을 제거했습니다.");
+ }
+ }
+ }
+ else
+ {
+ Debug.Log("GitUrlOverride 값이 비어있습니다. (정상)");
+ }
+
+ Debug.Log("=== MCP EditorPrefs 확인 완료 ===");
+ Debug.Log("Unity 에디터를 재시작하거나 MCP 윈도우를 다시 열어주세요.");
+ }
+
+ [MenuItem("Tools/MCP/Show All MCP EditorPrefs")]
+ public static void ShowAllMCPPrefs()
+ {
+ Debug.Log("=== 모든 MCP EditorPrefs 값 ===");
+
+ string[] keys = new[]
+ {
+ "MCPForUnity.GitUrlOverride",
+ "MCPForUnity.UseHttpTransport",
+ "MCPForUnity.HttpTransportScope",
+ "MCPForUnity.UvxPath",
+ "MCPForUnity.ClaudeCliPath",
+ "MCPForUnity.HttpUrl",
+ "MCPForUnity.HttpRemoteUrl",
+ };
+
+ foreach (string key in keys)
+ {
+ if (EditorPrefs.HasKey(key))
+ {
+ string value = EditorPrefs.GetString(key, "");
+ Debug.Log($"{key}: '{value}'");
+ }
+ else
+ {
+ Debug.Log($"{key}: (설정되지 않음)");
+ }
+ }
+ }
+
+ [MenuItem("Tools/MCP/Clear All MCP EditorPrefs")]
+ public static void ClearAllMCPPrefs()
+ {
+ bool confirm = EditorUtility.DisplayDialog(
+ "MCP EditorPrefs 초기화",
+ "모든 MCP for Unity 설정을 초기화하시겠습니까?\n이 작업은 되돌릴 수 없습니다.",
+ "초기화",
+ "취소"
+ );
+
+ if (!confirm)
+ {
+ Debug.Log("취소되었습니다.");
+ return;
+ }
+
+ Debug.Log("=== MCP EditorPrefs 초기화 시작 ===");
+
+ string[] keys = new[]
+ {
+ "MCPForUnity.GitUrlOverride",
+ "MCPForUnity.UseHttpTransport",
+ "MCPForUnity.HttpTransportScope",
+ "MCPForUnity.LastLocalHttpServerPid",
+ "MCPForUnity.LastLocalHttpServerPort",
+ "MCPForUnity.LastLocalHttpServerStartedUtc",
+ "MCPForUnity.LastLocalHttpServerPidArgsHash",
+ "MCPForUnity.LastLocalHttpServerPidFilePath",
+ "MCPForUnity.LastLocalHttpServerInstanceToken",
+ "MCPForUnity.UvxPath",
+ "MCPForUnity.ClaudeCliPath",
+ "MCPForUnity.HttpUrl",
+ "MCPForUnity.HttpRemoteUrl",
+ "MCPForUnity.DebugLogs",
+ "MCPForUnity.ValidationLevel",
+ "MCPForUnity.UnitySocketPort",
+ "MCPForUnity.ResumeHttpAfterReload",
+ "MCPForUnity.ResumeStdioAfterReload",
+ };
+
+ foreach (string key in keys)
+ {
+ if (EditorPrefs.HasKey(key))
+ {
+ EditorPrefs.DeleteKey(key);
+ Debug.Log($"✅ 삭제: {key}");
+ }
+ }
+
+ Debug.Log("=== MCP EditorPrefs 초기화 완료 ===");
+ Debug.Log("Unity 에디터를 재시작해주세요.");
+ }
+}
diff --git a/Assets/Editor/FixMCPEditorPrefs.cs.meta b/Assets/Editor/FixMCPEditorPrefs.cs.meta
new file mode 100644
index 00000000..31053924
--- /dev/null
+++ b/Assets/Editor/FixMCPEditorPrefs.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 955b75403593bb74fbf0ba110a3e1b83
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml
new file mode 100644
index 00000000..31b66433
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml.meta
new file mode 100644
index 00000000..197d20d0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 54e937514ef603843a1767c5aebbea66
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Sample/UIToolkit/UTKStyleGuideSample.Window.cs b/Assets/Sample/UIToolkit/UTKStyleGuideSample.Window.cs
index a82403f0..b364edf3 100644
--- a/Assets/Sample/UIToolkit/UTKStyleGuideSample.Window.cs
+++ b/Assets/Sample/UIToolkit/UTKStyleGuideSample.Window.cs
@@ -445,5 +445,314 @@ treeWindow.SetData(data);
treeWindow.Show();");
}
+ private void InitializePropertyListWindowSample(VisualElement root)
+ {
+ var container = root.Q("property-list-window-container");
+ if (container == null) return;
+
+ var propertyWindow = new UTKPropertyListWindow();
+ propertyWindow.Title = "속성 편집기";
+ propertyWindow.ShowCloseButton = true;
+ propertyWindow.style.width = 320;
+ propertyWindow.style.height = 600;
+
+ // 이벤트 구독
+ propertyWindow.OnCloseClicked += () =>
+ {
+ Debug.Log("Property Window Close clicked");
+ };
+
+ propertyWindow.OnPropertyValueChanged += args =>
+ {
+ Debug.Log($"Property Changed: {args.PropertyId} = {args.NewValue}");
+ };
+
+ propertyWindow.OnPropertyClicked += args =>
+ {
+ Debug.Log($"Property Clicked: {args.Id} {args.DisplayName}");
+ };
+
+ propertyWindow.OnPropertyButtonClicked += (id, actionName) =>
+ {
+ Debug.Log($"Button Clicked: {id} - Action: {actionName}");
+ };
+
+ // 샘플 데이터 생성 (모든 PropertyItem 종류 포함)
+ var entries = CreatePropertyListSampleEntries();
+ propertyWindow.LoadMixedProperties(entries);
+ propertyWindow.Show();
+
+ container.Add(propertyWindow);
+
+ SetCodeSamples(root,
+ csharpCode: @"// 속성 윈도우 생성
+var propertyWindow = new UTKPropertyListWindow();
+propertyWindow.Title = ""속성 편집기"";
+propertyWindow.ShowCloseButton = true;
+
+// 이벤트 구독
+propertyWindow.OnPropertyValueChanged += args =>
+{
+ Debug.Log($""{args.PropertyId} = {args.NewValue}"");
+};
+
+// 샘플 데이터
+var entries = new List();
+
+// String
+entries.Add(new UTKStringPropertyItem(""name"", ""Name"", ""Sample Object""));
+
+// Bool
+entries.Add(new UTKBoolPropertyItem(""active"", ""Is Active"", true));
+
+// Int (Slider)
+entries.Add(new UTKIntPropertyItem(""count"", ""Count"", 10, 0, 100, useSlider: true));
+
+// Float (Slider + Stepper)
+entries.Add(new UTKFloatPropertyItem(""speed"", ""Speed"", 1.5f, 0f, 10f, useSlider: true, useStepper: true));
+
+// Vector2/Vector3
+entries.Add(new UTKVector2PropertyItem(""offset"", ""Offset"", Vector2.zero));
+entries.Add(new UTKVector3PropertyItem(""position"", ""Position"", Vector3.zero));
+
+// Color
+entries.Add(new UTKColorPropertyItem(""color"", ""Color"", Color.red));
+
+// Date/DateTime
+entries.Add(new UTKDatePropertyItem(""date"", ""Date"", DateTime.Today));
+entries.Add(new UTKDateTimePropertyItem(""datetime"", ""DateTime"", DateTime.Now));
+
+// Range
+entries.Add(new UTKIntRangePropertyItem(""range"", ""Range"", 10, 90));
+entries.Add(new UTKFloatRangePropertyItem(""floatRange"", ""Float Range"", 1.5f, 8.5f));
+
+// Dropdown
+entries.Add(new UTKDropdownPropertyItem(""dropdown"", ""Dropdown"",
+ new List { ""Option A"", ""Option B"", ""Option C"" }, ""Option A""));
+
+// Enum
+entries.Add(new UTKEnumPropertyItem(""layer"", ""Layer"", LayerMask.NameToLayer(""Default"")));
+
+// Group
+var group = new UTKPropertyGroup(""transform"", ""Transform"");
+group.AddItem(new UTKVector3PropertyItem(""pos"", ""Position"", Vector3.zero));
+group.AddItem(new UTKVector3PropertyItem(""rot"", ""Rotation"", Vector3.zero));
+entries.Add(group);
+
+propertyWindow.LoadMixedProperties(entries);
+propertyWindow.Show();",
+ uxmlCode: @"
+
+
+");
+ }
+
+ ///
+ /// 모든 PropertyItem 종류를 포함하는 샘플 데이터를 생성합니다.
+ ///
+ private List CreatePropertyListSampleEntries()
+ {
+ var entries = new List();
+
+ // ===== 개별 아이템들 =====
+
+ // String (편집 가능)
+ entries.Add(new UTKStringPropertyItem("string", "String", "Editable text"));
+
+ // String with Action Button
+ var stringWithButton = new UTKStringPropertyItem("string_btn", "String Button", "Click button");
+ stringWithButton.ActionButton = new UTKButtonItem("btn_search", "search", "", UTKMaterialIcons.Search,
+ UTKButton.ButtonVariant.OutlineNormal, UTKButton.ButtonSize.Small);
+ stringWithButton.ActionButton.IconOnly = true;
+ stringWithButton.ActionButton.IconSize = 14;
+ entries.Add(stringWithButton);
+
+ // String (읽기 전용)
+ entries.Add(new UTKStringPropertyItem("string_ro", "String (RO)", "Read-only", isReadOnly: true));
+
+ // Bool (편집 가능)
+ entries.Add(new UTKBoolPropertyItem("bool", "Bool", true));
+
+ // Bool (읽기 전용)
+ entries.Add(new UTKBoolPropertyItem("bool_ro", "Bool (RO)", true, isReadOnly: true));
+
+ // Int (Slider)
+ entries.Add(new UTKIntPropertyItem("int", "Int", 42, 0, 100, useSlider: true));
+
+ // Int (Slider + Stepper)
+ entries.Add(new UTKIntPropertyItem("int_stepper", "Int Stepper", 50, 0, 100, useSlider: true, useStepper: true));
+
+ // Int (읽기 전용)
+ entries.Add(new UTKIntPropertyItem("int_ro", "Int (RO)", 99, 0, 100, useSlider: true, isReadOnly: true));
+
+ // Float (Slider + Stepper)
+ entries.Add(new UTKFloatPropertyItem("float", "Float", 3.14f, 0f, 10f, useSlider: true, useStepper: true));
+
+ // Float (Stepper만)
+ entries.Add(new UTKFloatPropertyItem("float_stepper", "Float Stepper", 2.5f, 0f, 10f, useSlider: false, useStepper: true));
+
+ // Float (읽기 전용)
+ entries.Add(new UTKFloatPropertyItem("float_ro", "Float (RO)", 7.2f, 0f, 10f, useSlider: true, isReadOnly: true));
+
+ // Vector2
+ entries.Add(new UTKVector2PropertyItem("vec2", "Vector2", new Vector2(1, 2)));
+
+ // Vector2 (읽기 전용)
+ entries.Add(new UTKVector2PropertyItem("vec2_ro", "Vector2 (RO)", new Vector2(3, 4)) { IsReadOnly = true });
+
+ // Vector3
+ entries.Add(new UTKVector3PropertyItem("vec3", "Vector3", new Vector3(1, 2, 3)));
+
+ // Vector3 (읽기 전용)
+ entries.Add(new UTKVector3PropertyItem("vec3_ro", "Vector3 (RO)", new Vector3(4, 5, 6)) { IsReadOnly = true });
+
+ // Color
+ entries.Add(new UTKColorPropertyItem("color", "Color", Color.red));
+
+ // Color (Alpha 포함)
+ entries.Add(new UTKColorPropertyItem("color_alpha", "Color (Alpha)", Color.blue, useAlpha: true));
+
+ // Color (읽기 전용)
+ entries.Add(new UTKColorPropertyItem("color_ro", "Color (RO)", Color.green) { IsReadOnly = true });
+
+ // ColorState
+ entries.Add(new UTKColorStatePropertyItem("colorstate", "ColorState", new UTKColorState("Active", Color.green)));
+
+ // ColorState (읽기 전용)
+ entries.Add(new UTKColorStatePropertyItem("colorstate_ro", "ColorState (RO)", new UTKColorState("Locked", Color.gray)) { IsReadOnly = true });
+
+ // Date
+ entries.Add(new UTKDatePropertyItem("date", "Date", DateTime.Today));
+
+ // Date (읽기 전용)
+ entries.Add(new UTKDatePropertyItem("date_ro", "Date (RO)", DateTime.Today.AddDays(7), isReadOnly: true));
+
+ // DateTime
+ entries.Add(new UTKDateTimePropertyItem("datetime", "DateTime", DateTime.Now));
+
+ // DateTime (읽기 전용)
+ entries.Add(new UTKDateTimePropertyItem("datetime_ro", "DateTime (RO)", DateTime.Now.AddHours(1), isReadOnly: true));
+
+ // DateRange
+ entries.Add(new UTKDateRangePropertyItem("daterange", "DateRange", DateTime.Today, DateTime.Today.AddDays(7)));
+
+ // DateRange (읽기 전용)
+ entries.Add(new UTKDateRangePropertyItem("daterange_ro", "DateRange (RO)", DateTime.Today.AddDays(10), DateTime.Today.AddDays(20)) { IsReadOnly = true });
+
+ // DateTimeRange
+ entries.Add(new UTKDateTimeRangePropertyItem("datetimerange", "DateTimeRange", DateTime.Now, DateTime.Now.AddHours(2)));
+
+ // DateTimeRange (읽기 전용)
+ entries.Add(new UTKDateTimeRangePropertyItem("datetimerange_ro", "DateTimeRange (RO)", DateTime.Now.AddHours(3), DateTime.Now.AddHours(5)) { IsReadOnly = true });
+
+ // Enum
+ entries.Add(new UTKEnumPropertyItem("enum", "Enum", SampleLayer.Default));
+
+ // Enum (읽기 전용)
+ entries.Add(new UTKEnumPropertyItem("enum_ro", "Enum (RO)", SampleLayer.Water) { IsReadOnly = true });
+
+ // Dropdown
+ entries.Add(new UTKDropdownPropertyItem("dropdown", "Dropdown",
+ new List { "Option A", "Option B", "Option C" }, "Option A"));
+
+ // Dropdown (읽기 전용)
+ entries.Add(new UTKDropdownPropertyItem("dropdown_ro", "Dropdown (RO)",
+ new List { "Option X", "Option Y", "Option Z" }, "Option Y") { IsReadOnly = true });
+
+ // MultiSelectDropdown
+ entries.Add(new UTKMultiSelectDropdownPropertyItem("multiselect", "MultiSelect",
+ new List { "Tag1", "Tag2", "Tag3", "Tag4" },
+ new List { "Tag1", "Tag3" }));
+
+ // MultiSelectDropdown (읽기 전용)
+ entries.Add(new UTKMultiSelectDropdownPropertyItem("multiselect_ro", "MultiSelect (RO)",
+ new List { "Feature A", "Feature B", "Feature C" },
+ new List { "Feature B" }) { IsReadOnly = true });
+
+ // Radio
+ entries.Add(new UTKRadioPropertyItem("radio", "Radio",
+ new List { "Choice 1", "Choice 2", "Choice 3" }, 0));
+
+ // Radio (읽기 전용)
+ entries.Add(new UTKRadioPropertyItem("radio_ro", "Radio (RO)",
+ new List { "Choice A", "Choice B", "Choice C" }, 1) { IsReadOnly = true });
+
+ // IntRange
+ entries.Add(new UTKIntRangePropertyItem("intrange", "IntRange", 10, 90));
+
+ // IntRange (Stepper)
+ entries.Add(new UTKIntRangePropertyItem("intrange_stepper", "IntRange Stepper", 20, 80, useStepper: true));
+
+ // IntRange (읽기 전용)
+ entries.Add(new UTKIntRangePropertyItem("intrange_ro", "IntRange (RO)", 30, 70, isReadOnly: true));
+
+ // FloatRange
+ entries.Add(new UTKFloatRangePropertyItem("floatrange", "FloatRange", 1.5f, 8.5f));
+
+ // FloatRange (Stepper)
+ entries.Add(new UTKFloatRangePropertyItem("floatrange_stepper", "FloatRange Stepper", 2.5f, 7.5f, stepperStep: 0.5f, stepperMinValue: 0f, stepperMaxValue: 100f, useStepper: true));
+
+ // FloatRange (읽기 전용)
+ entries.Add(new UTKFloatRangePropertyItem("floatrange_ro", "FloatRange (RO)", 3.0f, 6.0f) { IsReadOnly = true });
+
+ // FloatDropdown
+ entries.Add(new UTKFloatDropdownPropertyItem("floatdropdown", "FloatDropdown",
+ 1.5f, new List { "mm", "cm", "m" }, "cm"));
+
+ // FloatDropdown (Stepper)
+ entries.Add(new UTKFloatDropdownPropertyItem("floatdropdown_stepper", "FloatDropdown Stepper",
+ 10.0f, new List { "mm", "cm", "m" }, "m",
+ floatMinValue: 0f, floatMaxValue: 1000f, stepperStep: 0.5f, useStepper: true));
+
+ // FloatDropdown (읽기 전용)
+ entries.Add(new UTKFloatDropdownPropertyItem("floatdropdown_ro", "FloatDropdown (RO)",
+ 5.0f, new List { "mm", "cm", "m" }, "m", isReadOnly: true));
+
+ // ===== 그룹에 속한 아이템들 =====
+
+ // Basic Properties 그룹
+ var basicGroup = new UTKPropertyGroup("basic", "Basic Properties");
+ basicGroup.AddItem(new UTKStringPropertyItem("name", "Name", "Sample Object"));
+ basicGroup.AddItem(new UTKBoolPropertyItem("active", "Is Active", true));
+ basicGroup.AddItem(new UTKIntPropertyItem("count", "Count", 10, 0, 100, useSlider: true));
+ entries.Add(basicGroup);
+
+ // Transform 그룹
+ var transformGroup = new UTKPropertyGroup("transform", "Transform");
+ transformGroup.AddItem(new UTKVector3PropertyItem("position", "Position", Vector3.zero));
+ transformGroup.AddItem(new UTKVector3PropertyItem("rotation", "Rotation", Vector3.zero));
+ transformGroup.AddItem(new UTKVector3PropertyItem("scale", "Scale", Vector3.one));
+ entries.Add(transformGroup);
+
+ // Appearance 그룹
+ var appearanceGroup = new UTKPropertyGroup("appearance", "Appearance");
+ appearanceGroup.AddItem(new UTKColorPropertyItem("mainColor", "Main Color", Color.blue));
+ appearanceGroup.AddItem(new UTKColorPropertyItem("emissionColor", "Emission", Color.yellow, useAlpha: true));
+ appearanceGroup.AddItem(new UTKFloatPropertyItem("alpha", "Alpha", 1f, 0f, 1f, useSlider: true));
+ entries.Add(appearanceGroup);
+
+ // Button 그룹
+ var buttonGroup = new UTKPropertyGroup("buttons", "Buttons");
+ buttonGroup.AddItem(new UTKButtonItem("btn_save", "save", "Save", UTKMaterialIcons.Save,
+ UTKButton.ButtonVariant.Primary, UTKButton.ButtonSize.Medium));
+ buttonGroup.AddItem(new UTKButtonItem("btn_load", "load", "Load", UTKMaterialIcons.Download,
+ UTKButton.ButtonVariant.Normal, UTKButton.ButtonSize.Medium));
+ buttonGroup.AddItem(new UTKButtonItem("btn_delete", "delete", "Delete", UTKMaterialIcons.Delete,
+ UTKButton.ButtonVariant.Danger, UTKButton.ButtonSize.Medium));
+ entries.Add(buttonGroup);
+
+ return entries;
+ }
+
+ // 샘플 열거형 (UTKPropertyListWindowSample과 동일)
+ public enum SampleLayer
+ {
+ Default,
+ TransparentFX,
+ IgnoreRaycast,
+ Water,
+ UI
+ }
+
#endregion
}
diff --git a/Assets/Sample/UIToolkit/UTKStyleGuideSample.cs b/Assets/Sample/UIToolkit/UTKStyleGuideSample.cs
index f928db5a..bf5e85f0 100644
--- a/Assets/Sample/UIToolkit/UTKStyleGuideSample.cs
+++ b/Assets/Sample/UIToolkit/UTKStyleGuideSample.cs
@@ -106,6 +106,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
["UTKComponentTabListWindow"] = "UIToolkit/Sample/Window/UTKComponentTabListWindowSample",
["UTKImageListWindow"] = "UIToolkit/Sample/Window/UTKImageListWindowSample",
["UTKTreeListWindow"] = "UIToolkit/Sample/Window/UTKTreeListWindowSample",
+ ["UTKPropertyListWindow"] = "UIToolkit/Sample/Window/UTKPropertyListWindowSample",
};
private static readonly Dictionary ControlCategories = new()
@@ -121,7 +122,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
["Tab"] = new[] { "UTKTabView" },
["Modal"] = new[] { "UTKAlert", "UTKToast", "UTKTooltip" },
["Picker"] = new[] { "UTKColorPicker", "UTKDatePicker" },
- ["Window"] = new[] { "UTKAccordionListWindow", "UTKComponentListWindow", "UTKComponentTabListWindow", "UTKImageListWindow", "UTKTreeListWindow" },
+ ["Window"] = new[] { "UTKAccordionListWindow", "UTKComponentListWindow", "UTKComponentTabListWindow", "UTKImageListWindow", "UTKTreeListWindow", "UTKPropertyListWindow" },
};
///
@@ -573,6 +574,9 @@ public partial class UTKStyleGuideSample : MonoBehaviour
case "UTKTreeListWindow":
InitializeTreeListWindowSample(root);
break;
+ case "UTKPropertyListWindow":
+ InitializePropertyListWindowSample(root);
+ break;
}
}
diff --git a/Assets/Scripts/UVC/UIToolkit/Window/UTKPropertyListWindow.cs b/Assets/Scripts/UVC/UIToolkit/Window/UTKPropertyListWindow.cs
index 7da16fef..062e536b 100644
--- a/Assets/Scripts/UVC/UIToolkit/Window/UTKPropertyListWindow.cs
+++ b/Assets/Scripts/UVC/UIToolkit/Window/UTKPropertyListWindow.cs
@@ -26,7 +26,7 @@ namespace UVC.UIToolkit
/// - Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss
///
///
- /// 사용 예:
+ /// 사용 예 (C#):
///
/// // 1. 윈도우 생성 및 설정
/// var window = new UTKPropertyListWindow("속성 편집기");
@@ -67,6 +67,14 @@ namespace UVC.UIToolkit
///
/// root.Add(window);
///
+ ///
+ /// 사용 예 (UXML):
+ ///
+ /// <?xml version="1.0" encoding="utf-8"?>
+ /// <UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit">
+ /// <utk:UTKPropertyListWindow name="property-window" />
+ /// </UXML>
+ ///
///
[UxmlElement]
public partial class UTKPropertyListWindow : VisualElement, IDisposable
diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json
index 6199e394..9eed9dfd 100644
--- a/Packages/packages-lock.json
+++ b/Packages/packages-lock.json
@@ -7,7 +7,7 @@
"dependencies": {
"com.unity.nuget.newtonsoft-json": "3.0.2"
},
- "hash": "50c6ed4ff239e6ae21d0884ff68f52f738cf247a"
+ "hash": "ad2f6376d4ce744e9e200d84307a479cd7b7db3c"
},
"com.cysharp.unitask": {
"version": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask",