UTKPropertyWindow 완료

This commit is contained in:
김형인
2026-02-13 12:23:09 +09:00
parent 15886dc1f9
commit b19fb56c8c
8 changed files with 504 additions and 3 deletions

View File

@@ -0,0 +1,148 @@
#nullable enable
using UnityEditor;
using UnityEngine;
/// <summary>
/// MCP for Unity EditorPrefs 설정 확인 및 수정 도구
/// </summary>
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 에디터를 재시작해주세요.");
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 955b75403593bb74fbf0ba110a3e1b83

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit">
<Style src="../UTKSampleCommon.uss" />
<Style src="UTKWindowSample.uss" />
<VisualElement class="utk-sample-container">
<Label class="utk-sample-desc" text="속성 편집기를 윈도우 형태로 래핑한 컴포넌트입니다. 모든 종류의 PropertyItem을 지원하며 그룹화, 읽기 전용, 가시성 제어 등 다양한 기능을 제공합니다." />
<VisualElement class="utk-sample-section">
<Label class="utk-sample-section__title" text="UTKPropertyListWindow" />
<VisualElement name="property-list-window-container" class="utk-window-sample-container" style="width: 380px;" />
</VisualElement>
<!-- Code Sample -->
<VisualElement class="utk-code-sample-container">
<utk:UTKCodeBlock name="code-csharp" title="C#" />
<utk:UTKCodeBlock name="code-uxml" title="UXML" />
</VisualElement>
</VisualElement>
</UXML>

View File

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

View File

@@ -445,5 +445,314 @@ treeWindow.SetData(data);
treeWindow.Show();"); treeWindow.Show();");
} }
private void InitializePropertyListWindowSample(VisualElement root)
{
var container = root.Q<VisualElement>("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<IUTKPropertyEntry>();
// 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<string> { ""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: @"<?xml version=""1.0"" encoding=""utf-8""?>
<UXML xmlns=""UnityEngine.UIElements"" xmlns:utk=""UVC.UIToolkit"">
<utk:UTKPropertyListWindow name=""property-window"" />
</UXML>");
}
/// <summary>
/// 모든 PropertyItem 종류를 포함하는 샘플 데이터를 생성합니다.
/// </summary>
private List<IUTKPropertyEntry> CreatePropertyListSampleEntries()
{
var entries = new List<IUTKPropertyEntry>();
// ===== 개별 아이템들 =====
// 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<string> { "Option A", "Option B", "Option C" }, "Option A"));
// Dropdown (읽기 전용)
entries.Add(new UTKDropdownPropertyItem("dropdown_ro", "Dropdown (RO)",
new List<string> { "Option X", "Option Y", "Option Z" }, "Option Y") { IsReadOnly = true });
// MultiSelectDropdown
entries.Add(new UTKMultiSelectDropdownPropertyItem("multiselect", "MultiSelect",
new List<string> { "Tag1", "Tag2", "Tag3", "Tag4" },
new List<string> { "Tag1", "Tag3" }));
// MultiSelectDropdown (읽기 전용)
entries.Add(new UTKMultiSelectDropdownPropertyItem("multiselect_ro", "MultiSelect (RO)",
new List<string> { "Feature A", "Feature B", "Feature C" },
new List<string> { "Feature B" }) { IsReadOnly = true });
// Radio
entries.Add(new UTKRadioPropertyItem("radio", "Radio",
new List<string> { "Choice 1", "Choice 2", "Choice 3" }, 0));
// Radio (읽기 전용)
entries.Add(new UTKRadioPropertyItem("radio_ro", "Radio (RO)",
new List<string> { "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<string> { "mm", "cm", "m" }, "cm"));
// FloatDropdown (Stepper)
entries.Add(new UTKFloatDropdownPropertyItem("floatdropdown_stepper", "FloatDropdown Stepper",
10.0f, new List<string> { "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<string> { "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 #endregion
} }

View File

@@ -106,6 +106,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
["UTKComponentTabListWindow"] = "UIToolkit/Sample/Window/UTKComponentTabListWindowSample", ["UTKComponentTabListWindow"] = "UIToolkit/Sample/Window/UTKComponentTabListWindowSample",
["UTKImageListWindow"] = "UIToolkit/Sample/Window/UTKImageListWindowSample", ["UTKImageListWindow"] = "UIToolkit/Sample/Window/UTKImageListWindowSample",
["UTKTreeListWindow"] = "UIToolkit/Sample/Window/UTKTreeListWindowSample", ["UTKTreeListWindow"] = "UIToolkit/Sample/Window/UTKTreeListWindowSample",
["UTKPropertyListWindow"] = "UIToolkit/Sample/Window/UTKPropertyListWindowSample",
}; };
private static readonly Dictionary<string, string[]> ControlCategories = new() private static readonly Dictionary<string, string[]> ControlCategories = new()
@@ -121,7 +122,7 @@ public partial class UTKStyleGuideSample : MonoBehaviour
["Tab"] = new[] { "UTKTabView" }, ["Tab"] = new[] { "UTKTabView" },
["Modal"] = new[] { "UTKAlert", "UTKToast", "UTKTooltip" }, ["Modal"] = new[] { "UTKAlert", "UTKToast", "UTKTooltip" },
["Picker"] = new[] { "UTKColorPicker", "UTKDatePicker" }, ["Picker"] = new[] { "UTKColorPicker", "UTKDatePicker" },
["Window"] = new[] { "UTKAccordionListWindow", "UTKComponentListWindow", "UTKComponentTabListWindow", "UTKImageListWindow", "UTKTreeListWindow" }, ["Window"] = new[] { "UTKAccordionListWindow", "UTKComponentListWindow", "UTKComponentTabListWindow", "UTKImageListWindow", "UTKTreeListWindow", "UTKPropertyListWindow" },
}; };
/// <summary> /// <summary>
@@ -573,6 +574,9 @@ public partial class UTKStyleGuideSample : MonoBehaviour
case "UTKTreeListWindow": case "UTKTreeListWindow":
InitializeTreeListWindowSample(root); InitializeTreeListWindowSample(root);
break; break;
case "UTKPropertyListWindow":
InitializePropertyListWindowSample(root);
break;
} }
} }

View File

@@ -26,7 +26,7 @@ namespace UVC.UIToolkit
/// <item>Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss</item> /// <item>Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss</item>
/// </list> /// </list>
/// ///
/// <para><b>사용 예:</b></para> /// <para><b>사용 예 (C#):</b></para>
/// <code> /// <code>
/// // 1. 윈도우 생성 및 설정 /// // 1. 윈도우 생성 및 설정
/// var window = new UTKPropertyListWindow("속성 편집기"); /// var window = new UTKPropertyListWindow("속성 편집기");
@@ -67,6 +67,14 @@ namespace UVC.UIToolkit
/// ///
/// root.Add(window); /// root.Add(window);
/// </code> /// </code>
///
/// <para><b>사용 예 (UXML):</b></para>
/// <code>
/// &lt;?xml version="1.0" encoding="utf-8"?&gt;
/// &lt;UXML xmlns="UnityEngine.UIElements" xmlns:utk="UVC.UIToolkit"&gt;
/// &lt;utk:UTKPropertyListWindow name="property-window" /&gt;
/// &lt;/UXML&gt;
/// </code>
/// </summary> /// </summary>
[UxmlElement] [UxmlElement]
public partial class UTKPropertyListWindow : VisualElement, IDisposable public partial class UTKPropertyListWindow : VisualElement, IDisposable

View File

@@ -7,7 +7,7 @@
"dependencies": { "dependencies": {
"com.unity.nuget.newtonsoft-json": "3.0.2" "com.unity.nuget.newtonsoft-json": "3.0.2"
}, },
"hash": "50c6ed4ff239e6ae21d0884ff68f52f738cf247a" "hash": "ad2f6376d4ce744e9e200d84307a479cd7b7db3c"
}, },
"com.cysharp.unitask": { "com.cysharp.unitask": {
"version": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask", "version": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask",