UIToolkit 스타일 및 입력 컴포넌트 추가

- 기본 스타일을 위한 UTKDefaultStyle.uss파일을 생성했습니다.
- UIToolkit 설정 구성을 위한 UTKSettings.asset 파일을 추가했습니다.
- 포괄적인 색상 정의를 포함하는 다크 및 라이트 테마 스타일(UTKThemeDark.uss, UTKThemeLight.uss)을 도입했습니다.
- 테마에 독립적인 레이아웃 및 크기 변수를 위한 UTKVariables.uss를 구현했습니다.
- 스타일 및 이벤트 처리를 통해 열거형 선택을 위한 사용자 지정 드롭다운 컴포넌트(UTKEnumDropDown)를 개발했습니다.
- 사용자 지정 스타일 및 이벤트 관리를 통해 각각 이중 입력 필드와 긴 입력 필드를 위한 UTKDoubleField 및 UTKLongField 컴포넌트를 생성했습니다.
This commit is contained in:
logonkhi
2026-01-09 18:42:17 +09:00
parent 71831dd4c3
commit 6ae48ff30e
133 changed files with 5654 additions and 223 deletions

View File

@@ -48,9 +48,9 @@ public class UTKStyleGuideSample : MonoBehaviour
private static readonly Dictionary<string, string[]> ControlCategories = new()
{
["Button"] = new[] { "UTKButton", "UTKCheckBox", "UTKToggle", "UTKRadioButton", "UTKToggleButtonGroup" },
["Input"] = new[] { "UTKInputField", "UTKIntegerField", "UTKFloatField", "UTKVector2Field", "UTKVector3Field", "UTKVector4Field", "UTKRectField", "UTKBoundsField", "UTKNumberStepper" },
["Input"] = new[] { "UTKInputField", "UTKIntegerField", "UTKLongField", "UTKFloatField", "UTKDoubleField", "UTKVector2Field", "UTKVector3Field", "UTKVector4Field", "UTKRectField", "UTKBoundsField", "UTKNumberStepper" },
["Slider"] = new[] { "UTKSlider", "UTKMinMaxSlider", "UTKProgressBar" },
["Dropdown"] = new[] { "UTKDropdown", "UTKEnumField" },
["Dropdown"] = new[] { "UTKDropdown", "UTKEnumDropDown" },
["Label"] = new[] { "UTKLabel", "UTKHelpBox" },
["List"] = new[] { "UTKListView", "UTKTreeView", "UTKMultiColumnListView", "UTKMultiColumnTreeView", "UTKFoldout", "UTKScrollView" },
["Card"] = new[] { "UTKCard", "UTKPanel" },
@@ -256,6 +256,12 @@ public class UTKStyleGuideSample : MonoBehaviour
case "UTKFloatField":
CreateFloatFieldPreview(container);
break;
case "UTKLongField":
CreateLongFieldPreview(container);
break;
case "UTKDoubleField":
CreateDoubleFieldPreview(container);
break;
case "UTKVector2Field":
CreateVector2FieldPreview(container);
break;
@@ -286,8 +292,8 @@ public class UTKStyleGuideSample : MonoBehaviour
case "UTKDropdown":
CreateDropdownPreview(container);
break;
case "UTKEnumField":
CreateEnumFieldPreview(container);
case "UTKEnumDropDown":
CreateEnumDropDownPreview(container);
break;
case "UTKLabel":
CreateLabelPreview(container);
@@ -499,6 +505,40 @@ public class UTKStyleGuideSample : MonoBehaviour
row2.Add(field2);
}
private void CreateLongFieldPreview(VisualElement container)
{
AddDescription(container, "Long 정수 입력 필드");
var row1 = CreateRow(container, "Normal");
var field1 = new UTKLongField("Value");
field1.Value = 1234567890L;
field1.style.width = 200;
row1.Add(field1);
var row2 = CreateRow(container, "Disabled");
var field2 = new UTKLongField("Disabled") { IsEnabled = false };
field2.Value = 9876543210L;
field2.style.width = 200;
row2.Add(field2);
}
private void CreateDoubleFieldPreview(VisualElement container)
{
AddDescription(container, "Double 실수 입력 필드");
var row1 = CreateRow(container, "Normal");
var field1 = new UTKDoubleField("Value");
field1.Value = 3.141592653589793;
field1.style.width = 200;
row1.Add(field1);
var row2 = CreateRow(container, "Disabled");
var field2 = new UTKDoubleField("Disabled") { IsEnabled = false };
field2.Value = 2.718281828459045;
field2.style.width = 200;
row2.Add(field2);
}
private void CreateVector2FieldPreview(VisualElement container)
{
AddDescription(container, "2D 벡터 입력 필드");
@@ -615,25 +655,25 @@ public class UTKStyleGuideSample : MonoBehaviour
var row1 = CreateRow(container, "25%");
var progress1 = new UTKProgressBar();
progress1.Value = 0.25f;
progress1.Value = 25f;
progress1.style.width = 250;
row1.Add(progress1);
var row2 = CreateRow(container, "50%");
var progress2 = new UTKProgressBar();
progress2.Value = 0.5f;
progress2.Value = 50f;
progress2.style.width = 250;
row2.Add(progress2);
var row3 = CreateRow(container, "75%");
var progress3 = new UTKProgressBar();
progress3.Value = 0.75f;
progress3.Value = 75f;
progress3.style.width = 250;
row3.Add(progress3);
var row4 = CreateRow(container, "100%");
var progress4 = new UTKProgressBar();
progress4.Value = 1.0f;
progress4.Value = 100f;
progress4.style.width = 250;
row4.Add(progress4);
}
@@ -662,12 +702,12 @@ public class UTKStyleGuideSample : MonoBehaviour
private enum SampleEnum { Option1, Option2, Option3 }
private void CreateEnumFieldPreview(VisualElement container)
private void CreateEnumDropDownPreview(VisualElement container)
{
AddDescription(container, "Enum 선택 드");
AddDescription(container, "Enum 선택 드롭다운");
var row = CreateRow(container, "Enum");
var field = new UTKEnumField("Choice", SampleEnum.Option1);
var field = new UTKEnumDropDown("Choice", SampleEnum.Option1);
row.Add(field);
}
@@ -729,10 +769,28 @@ public class UTKStyleGuideSample : MonoBehaviour
treeView.style.height = 200;
treeView.style.width = 300;
// TreeView는 복잡한 설정이 필요하므로 간단한 설명만 표시
var placeholder = new Label("TreeView requires IList<TreeViewItemData> setup.");
placeholder.style.color = new Color(0.6f, 0.6f, 0.6f);
container.Add(placeholder);
// TreeView 데이터 생성
var treeItems = new List<TreeViewItemData<string>>
{
new TreeViewItemData<string>(1, "Parent 1", new List<TreeViewItemData<string>>
{
new TreeViewItemData<string>(2, "Child 1-1"),
new TreeViewItemData<string>(3, "Child 1-2"),
}),
new TreeViewItemData<string>(4, "Parent 2", new List<TreeViewItemData<string>>
{
new TreeViewItemData<string>(5, "Child 2-1"),
new TreeViewItemData<string>(6, "Child 2-2", new List<TreeViewItemData<string>>
{
new TreeViewItemData<string>(7, "Grandchild 2-2-1"),
new TreeViewItemData<string>(8, "Grandchild 2-2-2"),
}),
}),
new TreeViewItemData<string>(9, "Parent 3"),
};
treeView.SetRootItems(treeItems);
treeView.Rebuild();
container.Add(treeView);
}

View File

@@ -406,6 +406,7 @@ GameObject:
- component: {fileID: 2136622002}
- component: {fileID: 2136622001}
- component: {fileID: 2136622000}
- component: {fileID: 2136622003}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@@ -487,6 +488,50 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2136622003
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_TaaSettings:
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0