UIToolkit 기본 UI 개발 중

This commit is contained in:
logonkhi
2026-01-08 20:15:57 +09:00
parent ef4e86820c
commit 71831dd4c3
319 changed files with 28283 additions and 761 deletions

View File

@@ -0,0 +1,231 @@
#nullable enable
using System;
using UnityEngine;
using UnityEngine.UIElements;
using UVC.UIToolkit.Modal;
namespace UVC.Sample.UIToolkit
{
/// <summary>
/// UTKColorPicker 샘플 코드
/// 버튼 클릭으로 컬러 피커를 열고 선택된 색상을 미리보기에 표시
/// </summary>
public class UTKColorPickerSample : MonoBehaviour
{
[SerializeField] private UIDocument? _uiDocument;
private VisualElement? _root;
private VisualElement? _colorPreview;
private Label? _colorLabel;
private Toggle? _useAlphaToggle;
private Color _currentColor = Color.blue;
private UTKColorPicker? _currentPicker;
private void Start()
{
if (_uiDocument == null)
{
Debug.LogError("UIDocument is not assigned!");
return;
}
_root = _uiDocument.rootVisualElement;
CreateSampleUI();
}
private void CreateSampleUI()
{
if (_root == null) return;
// 메인 컨테이너
var container = new VisualElement();
container.style.position = Position.Absolute;
container.style.left = 20;
container.style.top = 20;
container.style.backgroundColor = new Color(0.2f, 0.2f, 0.2f);
container.style.borderTopLeftRadius = 8;
container.style.borderTopRightRadius = 8;
container.style.borderBottomLeftRadius = 8;
container.style.borderBottomRightRadius = 8;
container.style.paddingTop = 15;
container.style.paddingBottom = 15;
container.style.paddingLeft = 15;
container.style.paddingRight = 15;
container.style.width = 280;
// 타이틀
var title = new Label("UTKColorPicker Sample");
title.style.fontSize = 16;
title.style.unityFontStyleAndWeight = FontStyle.Bold;
title.style.color = Color.white;
title.style.marginBottom = 15;
container.Add(title);
// 색상 미리보기 영역
var previewRow = new VisualElement();
previewRow.style.flexDirection = FlexDirection.Row;
previewRow.style.alignItems = Align.Center;
previewRow.style.marginBottom = 15;
var previewLabel = new Label("Current Color:");
previewLabel.style.color = Color.white;
previewLabel.style.width = 100;
previewRow.Add(previewLabel);
_colorPreview = new VisualElement();
_colorPreview.style.width = 60;
_colorPreview.style.height = 30;
_colorPreview.style.backgroundColor = _currentColor;
_colorPreview.style.borderTopLeftRadius = 4;
_colorPreview.style.borderTopRightRadius = 4;
_colorPreview.style.borderBottomLeftRadius = 4;
_colorPreview.style.borderBottomRightRadius = 4;
_colorPreview.style.borderTopWidth = 1;
_colorPreview.style.borderBottomWidth = 1;
_colorPreview.style.borderLeftWidth = 1;
_colorPreview.style.borderRightWidth = 1;
_colorPreview.style.borderTopColor = new Color(0.4f, 0.4f, 0.4f);
_colorPreview.style.borderBottomColor = new Color(0.4f, 0.4f, 0.4f);
_colorPreview.style.borderLeftColor = new Color(0.4f, 0.4f, 0.4f);
_colorPreview.style.borderRightColor = new Color(0.4f, 0.4f, 0.4f);
previewRow.Add(_colorPreview);
_colorLabel = new Label(ColorToHex(_currentColor));
_colorLabel.style.color = new Color(0.7f, 0.7f, 0.7f);
_colorLabel.style.marginLeft = 10;
previewRow.Add(_colorLabel);
container.Add(previewRow);
// Alpha 사용 토글
var alphaRow = new VisualElement();
alphaRow.style.flexDirection = FlexDirection.Row;
alphaRow.style.alignItems = Align.Center;
alphaRow.style.marginBottom = 15;
_useAlphaToggle = new Toggle("Use Alpha Channel");
_useAlphaToggle.value = false;
_useAlphaToggle.style.color = Color.white;
alphaRow.Add(_useAlphaToggle);
container.Add(alphaRow);
// 버튼
var openPickerBtn = new Button(OpenColorPicker) { text = "Open Color Picker" };
openPickerBtn.style.height = 32;
openPickerBtn.style.marginBottom = 10;
container.Add(openPickerBtn);
// 프리셋 색상 버튼들
var presetLabel = new Label("Preset Colors:");
presetLabel.style.color = Color.white;
presetLabel.style.marginTop = 10;
presetLabel.style.marginBottom = 5;
container.Add(presetLabel);
var presetRow = new VisualElement();
presetRow.style.flexDirection = FlexDirection.Row;
presetRow.style.flexWrap = Wrap.Wrap;
Color[] presets = { Color.red, Color.green, Color.blue, Color.yellow, Color.cyan, Color.magenta, Color.white, Color.black };
foreach (var color in presets)
{
var presetBtn = new Button(() => SetColor(color));
presetBtn.style.width = 28;
presetBtn.style.height = 28;
presetBtn.style.marginRight = 5;
presetBtn.style.marginBottom = 5;
presetBtn.style.backgroundColor = color;
presetBtn.style.borderTopLeftRadius = 4;
presetBtn.style.borderTopRightRadius = 4;
presetBtn.style.borderBottomLeftRadius = 4;
presetBtn.style.borderBottomRightRadius = 4;
presetBtn.text = "";
presetRow.Add(presetBtn);
}
container.Add(presetRow);
_root.Add(container);
}
private void OpenColorPicker()
{
if (_root == null || _currentPicker != null) return;
bool useAlpha = _useAlphaToggle?.value ?? false;
_currentPicker = UTKColorPicker.Show(_root, _currentColor, "Select Color", useAlpha);
_currentPicker.OnColorChanged += OnColorChanged;
_currentPicker.OnColorSelected += OnColorSelected;
}
private void OnColorChanged(Color color)
{
// 실시간 미리보기 업데이트
if (_colorPreview != null)
{
_colorPreview.style.backgroundColor = color;
}
if (_colorLabel != null)
{
_colorLabel.text = ColorToHex(color);
}
}
private void OnColorSelected(Color color)
{
_currentColor = color;
Debug.Log($"Color Selected: {ColorToHex(color)}");
// 피커 참조 정리
if (_currentPicker != null)
{
_currentPicker.OnColorChanged -= OnColorChanged;
_currentPicker.OnColorSelected -= OnColorSelected;
_currentPicker = null;
}
}
private void SetColor(Color color)
{
_currentColor = color;
if (_colorPreview != null)
{
_colorPreview.style.backgroundColor = color;
}
if (_colorLabel != null)
{
_colorLabel.text = ColorToHex(color);
}
Debug.Log($"Preset Color Set: {ColorToHex(color)}");
}
private string ColorToHex(Color color)
{
bool useAlpha = _useAlphaToggle?.value ?? false;
if (useAlpha)
{
return "#" + ColorUtility.ToHtmlStringRGBA(color);
}
return "#" + ColorUtility.ToHtmlStringRGB(color);
}
private void OnDestroy()
{
if (_currentPicker != null)
{
_currentPicker.OnColorChanged -= OnColorChanged;
_currentPicker.OnColorSelected -= OnColorSelected;
_currentPicker.Dispose();
_currentPicker = null;
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1478cf56a7578d548a6309b6d8882dff

View File

@@ -0,0 +1,496 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1097328750
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1097328752}
- component: {fileID: 1097328754}
- component: {fileID: 1097328755}
m_Layer: 0
m_Name: Sample
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1097328752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1097328754
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
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}
m_SortingOrder: 1
m_Position: 0
m_WorldSpaceSizeMode: 1
m_WorldSpaceWidth: 1920
m_WorldSpaceHeight: 1080
m_PivotReferenceSize: 0
m_Pivot: 0
m_WorldSpaceCollider: {fileID: 0}
--- !u!114 &1097328755
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1478cf56a7578d548a6309b6d8882dff, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKColorPickerSample
_uiDocument: {fileID: 1097328754}
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1331954415}
- component: {fileID: 1331954414}
- component: {fileID: 1331954413}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1331954413
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1
m_XRTrackingOrigin: {fileID: 0}
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_DeselectOnBackgroundClick: 0
m_PointerBehavior: 0
m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
--- !u!114 &1331954414
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1331954415
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1414861612
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1414861614}
- component: {fileID: 1414861613}
- component: {fileID: 1414861615}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1414861613
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1414861614
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &1414861615
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_CustomShadowLayers: 0
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2136622002}
- component: {fileID: 2136622001}
- component: {fileID: 2136622000}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &2136622000
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
--- !u!20 &2136622001
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &2136622002
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 2136622002}
- {fileID: 1414861614}
- {fileID: 1331954415}
- {fileID: 1097328752}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: fb8f6b3740576e7448dc983b4e06083a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,260 @@
#nullable enable
using System;
using UnityEngine;
using UnityEngine.UIElements;
using UVC.Locale;
using UVC.UIToolkit.Modal;
namespace UVC.Sample.UIToolkit
{
/// <summary>
/// UTKDatePicker 샘플 코드
/// 버튼 클릭으로 날짜 피커를 열고 선택된 날짜를 표시
/// </summary>
public class UTKDatePickerSample : MonoBehaviour
{
[SerializeField] private UIDocument? _uiDocument;
private VisualElement? _root;
private Label? _dateLabel;
private Label? _dateTimeLabel;
private DateTime _selectedDate = DateTime.Today;
private DateTime _selectedDateTime = DateTime.Now;
private UTKDatePicker? _currentPicker;
private void Start()
{
if (_uiDocument == null)
{
Debug.LogError("UIDocument is not assigned!");
return;
}
bool success = LocalizationManager.Instance.LoadDefaultLocalizationData("ko", "locale.json");
Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");
_root = _uiDocument.rootVisualElement;
CreateSampleUI();
}
private void CreateSampleUI()
{
if (_root == null) return;
// 메인 컨테이너
var container = new VisualElement();
container.style.position = Position.Absolute;
container.style.left = 20;
container.style.top = 20;
container.style.backgroundColor = new Color(0.2f, 0.2f, 0.2f);
container.style.borderTopLeftRadius = 8;
container.style.borderTopRightRadius = 8;
container.style.borderBottomLeftRadius = 8;
container.style.borderBottomRightRadius = 8;
container.style.paddingTop = 15;
container.style.paddingBottom = 15;
container.style.paddingLeft = 15;
container.style.paddingRight = 15;
container.style.width = 320;
// 타이틀
var title = new Label("UTKDatePicker Sample");
title.style.fontSize = 16;
title.style.unityFontStyleAndWeight = FontStyle.Bold;
title.style.color = Color.white;
title.style.marginBottom = 15;
container.Add(title);
// Date Only 섹션
var dateSection = CreateSection("Date Only Mode", "Open Date Picker", OpenDatePicker);
_dateLabel = dateSection.label;
_dateLabel.text = FormatDate(_selectedDate);
container.Add(dateSection.container);
// DateTime 섹션
var dateTimeSection = CreateSection("Date & Time Mode", "Open DateTime Picker", OpenDateTimePicker);
_dateTimeLabel = dateTimeSection.label;
_dateTimeLabel.text = FormatDateTime(_selectedDateTime);
container.Add(dateTimeSection.container);
// 구분선
var separator = new VisualElement();
separator.style.height = 1;
separator.style.backgroundColor = new Color(0.4f, 0.4f, 0.4f);
separator.style.marginTop = 15;
separator.style.marginBottom = 15;
container.Add(separator);
// 프리셋 날짜 버튼들
var presetLabel = new Label("Quick Select:");
presetLabel.style.color = Color.white;
presetLabel.style.marginBottom = 10;
container.Add(presetLabel);
var presetRow = new VisualElement();
presetRow.style.flexDirection = FlexDirection.Row;
presetRow.style.flexWrap = Wrap.Wrap;
AddPresetButton(presetRow, "Today", DateTime.Today);
AddPresetButton(presetRow, "Tomorrow", DateTime.Today.AddDays(1));
AddPresetButton(presetRow, "Next Week", DateTime.Today.AddDays(7));
AddPresetButton(presetRow, "Next Month", DateTime.Today.AddMonths(1));
container.Add(presetRow);
_root.Add(container);
}
private (VisualElement container, Label label) CreateSection(string sectionTitle, string buttonText, Action onClick)
{
var section = new VisualElement();
section.style.marginBottom = 15;
var sectionLabel = new Label(sectionTitle);
sectionLabel.style.color = new Color(0.8f, 0.8f, 0.8f);
sectionLabel.style.fontSize = 12;
sectionLabel.style.marginBottom = 5;
section.Add(sectionLabel);
var row = new VisualElement();
row.style.flexDirection = FlexDirection.Row;
row.style.alignItems = Align.Center;
var valueLabel = new Label();
valueLabel.style.color = Color.white;
valueLabel.style.fontSize = 14;
valueLabel.style.flexGrow = 1;
valueLabel.style.paddingTop = 5;
valueLabel.style.paddingBottom = 5;
valueLabel.style.paddingLeft = 10;
valueLabel.style.paddingRight = 10;
valueLabel.style.backgroundColor = new Color(0.15f, 0.15f, 0.15f);
valueLabel.style.borderTopLeftRadius = 4;
valueLabel.style.borderTopRightRadius = 4;
valueLabel.style.borderBottomLeftRadius = 4;
valueLabel.style.borderBottomRightRadius = 4;
row.Add(valueLabel);
var button = new Button(onClick) { text = buttonText };
button.style.marginLeft = 10;
button.style.height = 28;
row.Add(button);
section.Add(row);
return (section, valueLabel);
}
private void AddPresetButton(VisualElement parent, string label, DateTime date)
{
var btn = new Button(() => SetDate(date)) { text = label };
btn.style.marginRight = 5;
btn.style.marginBottom = 5;
btn.style.height = 28;
parent.Add(btn);
}
private void OpenDatePicker()
{
if (_root == null || _currentPicker != null) return;
_currentPicker = UTKDatePicker.Show(
_root,
_selectedDate,
UTKDatePicker.PickerMode.DateOnly,
"Select Date"
);
_currentPicker.OnDateSelected += OnDateSelected;
_currentPicker.OnClosed += OnPickerClosed;
}
private void OpenDateTimePicker()
{
if (_root == null || _currentPicker != null) return;
_currentPicker = UTKDatePicker.Show(
_root,
_selectedDateTime,
UTKDatePicker.PickerMode.DateAndTime,
"Select Date & Time"
);
_currentPicker.OnDateSelected += OnDateTimeSelected;
_currentPicker.OnClosed += OnPickerClosed;
}
private void OnDateSelected(DateTime date)
{
_selectedDate = date;
if (_dateLabel != null)
{
_dateLabel.text = FormatDate(date);
}
Debug.Log($"Date Selected: {FormatDate(date)}");
}
private void OnDateTimeSelected(DateTime dateTime)
{
_selectedDateTime = dateTime;
if (_dateTimeLabel != null)
{
_dateTimeLabel.text = FormatDateTime(dateTime);
}
Debug.Log($"DateTime Selected: {FormatDateTime(dateTime)}");
}
private void OnPickerClosed()
{
if (_currentPicker != null)
{
_currentPicker.OnDateSelected -= OnDateSelected;
_currentPicker.OnDateSelected -= OnDateTimeSelected;
_currentPicker.OnClosed -= OnPickerClosed;
_currentPicker = null;
}
}
private void SetDate(DateTime date)
{
_selectedDate = date;
_selectedDateTime = new DateTime(date.Year, date.Month, date.Day,
_selectedDateTime.Hour, _selectedDateTime.Minute, 0);
if (_dateLabel != null)
{
_dateLabel.text = FormatDate(_selectedDate);
}
if (_dateTimeLabel != null)
{
_dateTimeLabel.text = FormatDateTime(_selectedDateTime);
}
Debug.Log($"Preset Date Set: {FormatDate(date)}");
}
private string FormatDate(DateTime date)
{
return date.ToString("yyyy-MM-dd");
}
private string FormatDateTime(DateTime dateTime)
{
return dateTime.ToString("yyyy-MM-dd HH:mm");
}
private void OnDestroy()
{
if (_currentPicker != null)
{
_currentPicker.OnDateSelected -= OnDateSelected;
_currentPicker.OnDateSelected -= OnDateTimeSelected;
_currentPicker.OnClosed -= OnPickerClosed;
_currentPicker.Dispose();
_currentPicker = null;
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bc81b9487fa9f354d89420b1a2533cce

View File

@@ -0,0 +1,496 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1097328750
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1097328752}
- component: {fileID: 1097328754}
- component: {fileID: 1097328755}
m_Layer: 0
m_Name: Sample
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1097328752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1097328754
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
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}
m_SortingOrder: 10
m_Position: 0
m_WorldSpaceSizeMode: 1
m_WorldSpaceWidth: 1920
m_WorldSpaceHeight: 1080
m_PivotReferenceSize: 0
m_Pivot: 0
m_WorldSpaceCollider: {fileID: 0}
--- !u!114 &1097328755
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bc81b9487fa9f354d89420b1a2533cce, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKDatePickerSample
_uiDocument: {fileID: 1097328754}
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1331954415}
- component: {fileID: 1331954414}
- component: {fileID: 1331954413}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1331954413
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1
m_XRTrackingOrigin: {fileID: 0}
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_DeselectOnBackgroundClick: 0
m_PointerBehavior: 0
m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
--- !u!114 &1331954414
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1331954415
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1414861612
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1414861614}
- component: {fileID: 1414861613}
- component: {fileID: 1414861615}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1414861613
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1414861614
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &1414861615
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_CustomShadowLayers: 0
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2136622002}
- component: {fileID: 2136622001}
- component: {fileID: 2136622000}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &2136622000
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
--- !u!20 &2136622001
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &2136622002
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 2136622002}
- {fileID: 1414861614}
- {fileID: 1331954415}
- {fileID: 1097328752}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 57b0e5f28dfdeaf4f92c72f097de43f2
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,146 @@
#nullable enable
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using UVC.UIToolkit.Property;
namespace UVC.Sample.UIToolkit
{
/// <summary>
/// UTKPropertyWindow 샘플 코드
/// 기존 PropertyWindowSample과 동일한 데이터를 UTKPropertyWindow로 표시
/// </summary>
public class UTKPropertyWindowSample : MonoBehaviour
{
[SerializeField] private UIDocument? _uiDocument;
private UTKPropertyWindow? _propertyWindow;
private void Start()
{
if (_uiDocument == null)
{
Debug.LogError("UIDocument is not assigned!");
return;
}
var root = _uiDocument.rootVisualElement;
CreateSamplePropertyWindow(root);
}
private void CreateSamplePropertyWindow(VisualElement root)
{
_propertyWindow = new UTKPropertyWindow("Sample Properties");
// 세로 높이를 부모에 맞게 꽉 채우기
_propertyWindow.style.position = Position.Absolute;
_propertyWindow.style.top = 0;
_propertyWindow.style.bottom = 0;
_propertyWindow.style.right = 0;
_propertyWindow.style.width = 300;
_propertyWindow.OnCloseClicked += () =>
{
Debug.Log("Property Window Close clicked");
_propertyWindow?.Hide();
};
_propertyWindow.OnPropertyValueChanged += args =>
{
Debug.Log($"Property Changed: {args.PropertyName} ({args.PropertyType}) = {args.NewValue}");
};
// 샘플 데이터 생성
var entries = CreateSampleEntries();
_propertyWindow.LoadMixedProperties(entries);
root.Add(_propertyWindow);
}
private List<IUTKPropertyEntry> CreateSampleEntries()
{
var entries = new List<IUTKPropertyEntry>();
// 기본 속성 그룹
var basicGroup = new UTKPropertyGroup("basic", "Basic Properties");
basicGroup.AddItem(new UTKStringPropertyItem("name", "Name", "Sample Object"));
basicGroup.AddItem(new UTKStringPropertyItem("description", "Description", "This is a sample object") { IsMultiline = true });
basicGroup.AddItem(new UTKBoolPropertyItem("active", "Is Active", true));
basicGroup.AddItem(new UTKIntPropertyItem("count", "Count", 10, 0, 100, true));
basicGroup.AddItem(new UTKFloatPropertyItem("speed", "Speed", 1.5f, 0f, 10f, true));
entries.Add(basicGroup);
// Transform 그룹
var transformGroup = new UTKPropertyGroup("transform", "Transform");
transformGroup.AddItem(new UTKVector3PropertyItem("position", "Position", new Vector3(0, 1, 0)));
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", Color.yellow, true));
appearanceGroup.AddItem(new UTKFloatPropertyItem("alpha", "Alpha", 1f, 0f, 1f, true));
entries.Add(appearanceGroup);
// Date/Time 그룹
var dateGroup = new UTKPropertyGroup("datetime", "Date & Time");
dateGroup.AddItem(new UTKDatePropertyItem("createdDate", "Created Date", DateTime.Today.AddDays(-30)));
dateGroup.AddItem(new UTKDateTimePropertyItem("lastModified", "Last Modified", DateTime.Now));
dateGroup.AddItem(new UTKDateRangePropertyItem("validPeriod", "Valid Period", DateTime.Today, DateTime.Today.AddMonths(1)));
entries.Add(dateGroup);
// Selection 그룹
var selectionGroup = new UTKPropertyGroup("selection", "Selection");
selectionGroup.AddItem(new UTKEnumPropertyItem("layer", "Layer", SampleLayer.Default));
selectionGroup.AddItem(new UTKDropdownPropertyItem("tag", "Tag",
new List<string> { "Untagged", "Player", "Enemy", "Item", "Environment" }, "Player"));
selectionGroup.AddItem(new UTKRadioPropertyItem("quality", "Quality",
new List<string> { "Low", "Medium", "High", "Ultra" }, 2));
entries.Add(selectionGroup);
// Range 그룹
var rangeGroup = new UTKPropertyGroup("range", "Range Properties");
rangeGroup.AddItem(new UTKIntRangePropertyItem("levelRange", "Level Range", 1, 50));
rangeGroup.AddItem(new UTKFloatRangePropertyItem("damageRange", "Damage Range", 10.5f, 25.0f));
entries.Add(rangeGroup);
// Special 그룹
var specialGroup = new UTKPropertyGroup("special", "Special Properties");
specialGroup.AddItem(new UTKColorStatePropertyItem("status", "Status",
new UTKColorState("Active", Color.green)));
specialGroup.AddItem(new UTKVector2PropertyItem("uv", "UV Offset", new Vector2(0.5f, 0.5f)));
entries.Add(specialGroup);
// 읽기 전용 그룹
var readOnlyGroup = new UTKPropertyGroup("readonly", "Read-Only Properties");
var idItem = new UTKStringPropertyItem("id", "ID", "OBJ-12345");
idItem.IsReadOnly = true;
readOnlyGroup.AddItem(idItem);
var versionItem = new UTKIntPropertyItem("version", "Version", 3);
versionItem.IsReadOnly = true;
readOnlyGroup.AddItem(versionItem);
entries.Add(readOnlyGroup);
return entries;
}
private void OnDestroy()
{
_propertyWindow?.Dispose();
_propertyWindow = null;
}
// 샘플 열거형
public enum SampleLayer
{
Default,
TransparentFX,
IgnoreRaycast,
Water,
UI
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e522b32221b7ee94e861ef868eb8c02d

View File

@@ -0,0 +1,496 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1097328750
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1097328752}
- component: {fileID: 1097328754}
- component: {fileID: 1097328755}
m_Layer: 0
m_Name: Sample
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1097328752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1097328754
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
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}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1
m_WorldSpaceWidth: 1920
m_WorldSpaceHeight: 1080
m_PivotReferenceSize: 0
m_Pivot: 0
m_WorldSpaceCollider: {fileID: 0}
--- !u!114 &1097328755
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e522b32221b7ee94e861ef868eb8c02d, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UVC.Sample.UIToolkit.UTKPropertyWindowSample
_uiDocument: {fileID: 1097328754}
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1331954415}
- component: {fileID: 1331954414}
- component: {fileID: 1331954413}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1331954413
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1
m_XRTrackingOrigin: {fileID: 0}
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_DeselectOnBackgroundClick: 0
m_PointerBehavior: 0
m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
--- !u!114 &1331954414
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1331954415
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1414861612
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1414861614}
- component: {fileID: 1414861613}
- component: {fileID: 1414861615}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1414861613
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1414861614
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &1414861615
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_CustomShadowLayers: 0
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2136622002}
- component: {fileID: 2136622001}
- component: {fileID: 2136622000}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &2136622000
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
--- !u!20 &2136622001
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &2136622002
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 2136622002}
- {fileID: 1414861614}
- {fileID: 1331954415}
- {fileID: 1097328752}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 94ad9ab3b88e5284795ea9cc9277cf67
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,975 @@
#nullable enable
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using UVC.UIToolkit;
using UVC.UIToolkit.Common;
using UVC.UIToolkit.Input;
using UVC.UIToolkit.Modal;
/// <summary>
/// UTK 컴포넌트들의 테마 전환 테스트를 위한 샘플입니다.
/// 왼쪽에 컨트롤 목록, 오른쪽에 선택된 컨트롤 미리보기를 표시합니다.
/// </summary>
public class UTKStyleGuideSample : MonoBehaviour
{
[SerializeField]
public UIDocument? uiDocument;
[SerializeField]
[Tooltip("시작 시 적용할 테마")]
private UTKTheme initialTheme = UTKTheme.Dark;
// USS 클래스명 상수
private static class UssClasses
{
public const string Main = "utk-sample-main";
public const string Header = "utk-sample-header";
public const string Title = "utk-sample-title";
public const string ThemeArea = "utk-sample-theme-area";
public const string ThemeLabel = "utk-sample-theme-label";
public const string Content = "utk-sample-content";
public const string Sidebar = "utk-sample-sidebar";
public const string SidebarScroll = "utk-sample-sidebar-scroll";
public const string Preview = "utk-sample-preview";
public const string PreviewScroll = "utk-sample-preview-scroll";
public const string PreviewTitle = "utk-sample-preview-title";
public const string PreviewContent = "utk-sample-preview-content";
public const string ControlItem = "utk-sample-control-item";
public const string ControlItemSelected = "utk-sample-control-item--selected";
public const string Section = "utk-sample-section";
public const string SectionTitle = "utk-sample-section__title";
public const string SectionDesc = "utk-sample-section__desc";
public const string Row = "utk-sample-row";
}
// 카테고리별 컨트롤 정의
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" },
["Slider"] = new[] { "UTKSlider", "UTKMinMaxSlider", "UTKProgressBar" },
["Dropdown"] = new[] { "UTKDropdown", "UTKEnumField" },
["Label"] = new[] { "UTKLabel", "UTKHelpBox" },
["List"] = new[] { "UTKListView", "UTKTreeView", "UTKMultiColumnListView", "UTKMultiColumnTreeView", "UTKFoldout", "UTKScrollView" },
["Card"] = new[] { "UTKCard", "UTKPanel" },
["Tab"] = new[] { "UTKTabView" },
["Modal"] = new[] { "UTKAlert", "UTKToast", "UTKTooltip" },
["Picker"] = new[] { "UTKColorPicker", "UTKDatePicker" }
};
// UI 요소들
private VisualElement? _root;
private VisualElement? _previewContent;
private Label? _previewTitle;
private Label? _themeLabel;
private string _selectedControl = "";
private VisualElement? _selectedItem;
void Start()
{
uiDocument ??= GetComponent<UIDocument>();
_root = uiDocument.rootVisualElement;
// 테마 매니저에 루트 등록
UTKThemeManager.Instance.RegisterRoot(_root);
// 샘플 전용 USS 로드
var sampleStyle = Resources.Load<StyleSheet>("UIToolkit/Sample/UTKStyleGuideSample");
if (sampleStyle != null)
{
_root.styleSheets.Add(sampleStyle);
}
// 초기 테마 설정
UTKThemeManager.Instance.SetTheme(initialTheme);
// 툴팁 매니저 초기화
UTKTooltipManager.Instance.Initialize(_root);
// UI 생성
CreateUI();
}
private void CreateUI()
{
if (_root == null) return;
// 메인 컨테이너
var mainContainer = new VisualElement { name = "main-container" };
mainContainer.AddToClassList(UssClasses.Main);
_root.Add(mainContainer);
// 헤더 영역
CreateHeader(mainContainer);
// 콘텐츠 영역 (사이드바 + 미리보기)
var content = new VisualElement { name = "content" };
content.AddToClassList(UssClasses.Content);
mainContainer.Add(content);
// 사이드바 (왼쪽)
CreateSidebar(content);
// 미리보기 영역 (오른쪽)
CreatePreviewArea(content);
// 첫 번째 컨트롤 선택
SelectControl("UTKButton");
}
private void CreateHeader(VisualElement parent)
{
var header = new VisualElement { name = "header" };
header.AddToClassList(UssClasses.Header);
parent.Add(header);
// 타이틀
var title = new Label("UTK Style Guide");
title.AddToClassList(UssClasses.Title);
header.Add(title);
// 테마 전환 영역
var themeArea = new VisualElement();
themeArea.AddToClassList(UssClasses.ThemeArea);
header.Add(themeArea);
// 현재 테마 라벨
_themeLabel = new Label($"Theme: {initialTheme}");
_themeLabel.AddToClassList(UssClasses.ThemeLabel);
themeArea.Add(_themeLabel);
// 테마 토글
var themeToggle = new UTKToggle("Dark Mode");
themeToggle.IsOn = initialTheme == UTKTheme.Dark;
themeToggle.OnValueChanged += (isOn) =>
{
var theme = isOn ? UTKTheme.Dark : UTKTheme.Light;
UTKThemeManager.Instance.SetTheme(theme);
if (_themeLabel != null)
_themeLabel.text = $"Theme: {theme}";
};
themeArea.Add(themeToggle);
}
private void CreateSidebar(VisualElement parent)
{
var sidebar = new VisualElement { name = "sidebar" };
sidebar.AddToClassList(UssClasses.Sidebar);
parent.Add(sidebar);
var sidebarScroll = new ScrollView(ScrollViewMode.Vertical);
sidebarScroll.AddToClassList(UssClasses.SidebarScroll);
sidebar.Add(sidebarScroll);
// 카테고리별 Foldout 생성
foreach (var category in ControlCategories)
{
var foldout = new UTKFoldout(category.Key, true);
sidebarScroll.Add(foldout);
foreach (var controlName in category.Value)
{
var item = new VisualElement { name = $"item-{controlName}" };
item.AddToClassList(UssClasses.ControlItem);
var label = new Label(controlName);
item.Add(label);
// 클릭 이벤트
var control = controlName; // 캡처용
item.RegisterCallback<ClickEvent>(_ => SelectControl(control));
foldout.Add(item);
}
}
}
private void CreatePreviewArea(VisualElement parent)
{
var preview = new VisualElement { name = "preview" };
preview.AddToClassList(UssClasses.Preview);
parent.Add(preview);
// 미리보기 타이틀
_previewTitle = new Label("Select a control");
_previewTitle.AddToClassList(UssClasses.PreviewTitle);
preview.Add(_previewTitle);
// 미리보기 스크롤
var previewScroll = new ScrollView(ScrollViewMode.Vertical);
previewScroll.AddToClassList(UssClasses.PreviewScroll);
preview.Add(previewScroll);
// 미리보기 컨텐츠
_previewContent = new VisualElement { name = "preview-content" };
_previewContent.AddToClassList(UssClasses.PreviewContent);
previewScroll.Add(_previewContent);
}
private void SelectControl(string controlName)
{
if (_root == null || _previewContent == null || _previewTitle == null) return;
// 이전 선택 해제
_selectedItem?.RemoveFromClassList(UssClasses.ControlItemSelected);
// 새 선택
_selectedControl = controlName;
_selectedItem = _root.Q<VisualElement>($"item-{controlName}");
_selectedItem?.AddToClassList(UssClasses.ControlItemSelected);
// 타이틀 업데이트
_previewTitle.text = controlName;
// 미리보기 컨텐츠 클리어 및 생성
_previewContent.Clear();
CreateControlPreview(controlName, _previewContent);
}
private void CreateControlPreview(string controlName, VisualElement container)
{
switch (controlName)
{
case "UTKButton":
CreateButtonPreview(container);
break;
case "UTKCheckBox":
CreateCheckBoxPreview(container);
break;
case "UTKToggle":
CreateTogglePreview(container);
break;
case "UTKRadioButton":
CreateRadioButtonPreview(container);
break;
case "UTKToggleButtonGroup":
CreateToggleButtonGroupPreview(container);
break;
case "UTKInputField":
CreateInputFieldPreview(container);
break;
case "UTKIntegerField":
CreateIntegerFieldPreview(container);
break;
case "UTKFloatField":
CreateFloatFieldPreview(container);
break;
case "UTKVector2Field":
CreateVector2FieldPreview(container);
break;
case "UTKVector3Field":
CreateVector3FieldPreview(container);
break;
case "UTKVector4Field":
CreateVector4FieldPreview(container);
break;
case "UTKRectField":
CreateRectFieldPreview(container);
break;
case "UTKBoundsField":
CreateBoundsFieldPreview(container);
break;
case "UTKNumberStepper":
CreateNumberStepperPreview(container);
break;
case "UTKSlider":
CreateSliderPreview(container);
break;
case "UTKMinMaxSlider":
CreateMinMaxSliderPreview(container);
break;
case "UTKProgressBar":
CreateProgressBarPreview(container);
break;
case "UTKDropdown":
CreateDropdownPreview(container);
break;
case "UTKEnumField":
CreateEnumFieldPreview(container);
break;
case "UTKLabel":
CreateLabelPreview(container);
break;
case "UTKHelpBox":
CreateHelpBoxPreview(container);
break;
case "UTKListView":
CreateListViewPreview(container);
break;
case "UTKTreeView":
CreateTreeViewPreview(container);
break;
case "UTKMultiColumnListView":
CreateMultiColumnListViewPreview(container);
break;
case "UTKMultiColumnTreeView":
CreateMultiColumnTreeViewPreview(container);
break;
case "UTKFoldout":
CreateFoldoutPreview(container);
break;
case "UTKScrollView":
CreateScrollViewPreview(container);
break;
case "UTKCard":
CreateCardPreview(container);
break;
case "UTKPanel":
CreatePanelPreview(container);
break;
case "UTKTabView":
CreateTabViewPreview(container);
break;
case "UTKAlert":
CreateAlertPreview(container);
break;
case "UTKToast":
CreateToastPreview(container);
break;
case "UTKTooltip":
CreateTooltipPreview(container);
break;
case "UTKColorPicker":
CreateColorPickerPreview(container);
break;
case "UTKDatePicker":
CreateDatePickerPreview(container);
break;
default:
container.Add(new Label($"Preview for {controlName} not implemented"));
break;
}
}
#region Button Previews
private void CreateButtonPreview(VisualElement container)
{
AddDescription(container, "다양한 스타일의 버튼 컴포넌트");
// Primary / Normal / Danger
var row1 = CreateRow(container, "Filled Buttons");
row1.Add(new UTKButton("Primary", "", UTKButton.ButtonVariant.Primary));
row1.Add(new UTKButton("Normal", "", UTKButton.ButtonVariant.Normal));
row1.Add(new UTKButton("Danger", "", UTKButton.ButtonVariant.Danger));
// Outline
var row2 = CreateRow(container, "Outline Buttons");
row2.Add(new UTKButton("Outline Primary", "", UTKButton.ButtonVariant.OutlinePrimary));
row2.Add(new UTKButton("Outline Normal", "", UTKButton.ButtonVariant.OutlineNormal));
row2.Add(new UTKButton("Outline Danger", "", UTKButton.ButtonVariant.OutlineDanger));
// Icon Only
var row3 = CreateRow(container, "Icon Only");
row3.Add(new UTKButton("", "✚", UTKButton.ButtonVariant.Primary) { IconOnly = true });
row3.Add(new UTKButton("", "✎", UTKButton.ButtonVariant.Normal) { IconOnly = true });
row3.Add(new UTKButton("", "✖", UTKButton.ButtonVariant.Danger) { IconOnly = true });
row3.Add(new UTKButton("", "⚙", UTKButton.ButtonVariant.OutlinePrimary) { IconOnly = true });
// Disabled
var row4 = CreateRow(container, "Disabled");
row4.Add(new UTKButton("Disabled", "", UTKButton.ButtonVariant.Primary) { IsEnabled = false });
row4.Add(new UTKButton("Disabled", "", UTKButton.ButtonVariant.Normal) { IsEnabled = false });
}
private void CreateCheckBoxPreview(VisualElement container)
{
AddDescription(container, "체크박스 컴포넌트");
var row = CreateRow(container, "States");
row.Add(new UTKCheckBox("Unchecked"));
row.Add(new UTKCheckBox("Checked") { IsChecked = true });
row.Add(new UTKCheckBox("Indeterminate") { IsIndeterminate = true });
row.Add(new UTKCheckBox("Disabled") { IsEnabled = false });
}
private void CreateTogglePreview(VisualElement container)
{
AddDescription(container, "토글 스위치 컴포넌트");
var row = CreateRow(container, "States");
row.Add(new UTKToggle("Off"));
row.Add(new UTKToggle("On") { IsOn = true });
row.Add(new UTKToggle("Disabled Off") { IsEnabled = false });
row.Add(new UTKToggle("Disabled On") { IsOn = true, IsEnabled = false });
}
private void CreateRadioButtonPreview(VisualElement container)
{
AddDescription(container, "라디오 버튼 컴포넌트");
var row = CreateRow(container, "Options");
row.Add(new UTKRadioButton("Option A") { IsChecked = true });
row.Add(new UTKRadioButton("Option B"));
row.Add(new UTKRadioButton("Option C"));
row.Add(new UTKRadioButton("Disabled") { IsEnabled = false });
}
private void CreateToggleButtonGroupPreview(VisualElement container)
{
AddDescription(container, "토글 버튼 그룹 컴포넌트");
var row = CreateRow(container, "Single Select");
var group1 = new UTKToggleButtonGroup();
group1.AddButton("Option 1");
group1.AddButton("Option 2");
group1.AddButton("Option 3");
row.Add(group1);
var row2 = CreateRow(container, "Multi Select");
var group2 = new UTKToggleButtonGroup { isMultipleSelection = true };
group2.AddButton("A");
group2.AddButton("B");
group2.AddButton("C");
group2.AddButton("D");
row2.Add(group2);
var row3 = CreateRow(container, "Disabled");
var group3 = new UTKToggleButtonGroup { IsEnabled = false };
group3.AddButton("Option 1");
group3.AddButton("Option 2");
group3.AddButton("Option 3");
row3.Add(group3);
}
#endregion
#region Input Previews
private void CreateInputFieldPreview(VisualElement container)
{
AddDescription(container, "텍스트 입력 필드");
var row1 = CreateRow(container, "With Label");
var input1 = new UTKInputField("Username", "Enter your name...");
input1.style.width = 250;
row1.Add(input1);
var row2 = CreateRow(container, "No Label");
var input2 = new UTKInputField("", "Search...");
input2.style.width = 200;
row2.Add(input2);
var row3 = CreateRow(container, "Disabled");
var input3 = new UTKInputField("Disabled", "Cannot edit...");
input3.style.width = 250;
input3.IsEnabled = false;
row3.Add(input3);
var row4 = CreateRow(container, "No Label Disabled");
var input4 = new UTKInputField("", "Cannot edit...");
input4.style.width = 200;
input4.IsEnabled = false;
row4.Add(input4);
}
private void CreateIntegerFieldPreview(VisualElement container)
{
AddDescription(container, "정수 입력 필드");
var row1 = CreateRow(container, "Normal");
var field1 = new UTKIntegerField("Count");
field1.Value = 42;
field1.style.width = 200;
row1.Add(field1);
var row2 = CreateRow(container, "Disabled");
var field2 = new UTKIntegerField("Disabled") { IsEnabled = false };
field2.Value = 100;
field2.style.width = 200;
row2.Add(field2);
}
private void CreateFloatFieldPreview(VisualElement container)
{
AddDescription(container, "실수 입력 필드");
var row1 = CreateRow(container, "Normal");
var field1 = new UTKFloatField("Value");
field1.Value = 3.14f;
field1.style.width = 200;
row1.Add(field1);
var row2 = CreateRow(container, "Disabled");
var field2 = new UTKFloatField("Disabled") { IsEnabled = false };
field2.Value = 2.718f;
field2.style.width = 200;
row2.Add(field2);
}
private void CreateVector2FieldPreview(VisualElement container)
{
AddDescription(container, "2D 벡터 입력 필드");
var row = CreateRow(container, "Position");
var field = new UTKVector2Field("Position");
field.Value = new Vector2(100, 200);
field.style.width = 250;
row.Add(field);
}
private void CreateVector3FieldPreview(VisualElement container)
{
AddDescription(container, "3D 벡터 입력 필드");
var row = CreateRow(container, "Position");
var field = new UTKVector3Field("Position");
field.Value = new Vector3(10, 20, 30);
field.style.width = 300;
row.Add(field);
}
private void CreateVector4FieldPreview(VisualElement container)
{
AddDescription(container, "4D 벡터 입력 필드");
var row = CreateRow(container, "Value");
var field = new UTKVector4Field("Color");
field.Value = new Vector4(1, 0.5f, 0.25f, 1);
field.style.width = 350;
row.Add(field);
}
private void CreateRectFieldPreview(VisualElement container)
{
AddDescription(container, "Rect 입력 필드 (x, y, width, height)");
var row = CreateRow(container, "Bounds");
var field = new UTKRectField("Area");
field.Value = new Rect(10, 20, 100, 50);
field.style.width = 300;
row.Add(field);
}
private void CreateBoundsFieldPreview(VisualElement container)
{
AddDescription(container, "Bounds 입력 필드 (center, extents)");
var row = CreateRow(container, "Collision");
var field = new UTKBoundsField("Bounds");
field.Value = new Bounds(new Vector3(0, 1, 0), new Vector3(2, 2, 2));
field.style.width = 350;
row.Add(field);
}
private void CreateNumberStepperPreview(VisualElement container)
{
AddDescription(container, "숫자 스테퍼 컴포넌트 (증감 버튼 포함)");
var row1 = CreateRow(container, "Step 1");
var stepper1 = new UTKNumberStepper(0, 100, 50, 1);
stepper1.style.width = 150;
row1.Add(stepper1);
var row2 = CreateRow(container, "Step 5");
var stepper2 = new UTKNumberStepper(0, 100, 25, 5);
stepper2.style.width = 150;
row2.Add(stepper2);
var row3 = CreateRow(container, "Wrap Around");
var stepper3 = new UTKNumberStepper(0, 100, 0, 10) { WrapAround = true };
stepper3.style.width = 150;
row3.Add(stepper3);
var row4 = CreateRow(container, "Disabled");
var stepper4 = new UTKNumberStepper(0, 100, 30, 1);
stepper4.style.width = 150;
stepper4.SetEnabled(false);
row4.Add(stepper4);
}
#endregion
#region Slider Previews
private void CreateSliderPreview(VisualElement container)
{
AddDescription(container, "슬라이더 컴포넌트");
var row1 = CreateRow(container, "Normal");
var slider1 = new UTKSlider("Volume", 0f, 100f, 50f);
slider1.style.width = 250;
row1.Add(slider1);
var row2 = CreateRow(container, "Disabled");
var slider2 = new UTKSlider("Disabled", 0f, 100f, 30f) { IsEnabled = false };
slider2.style.width = 250;
row2.Add(slider2);
}
private void CreateMinMaxSliderPreview(VisualElement container)
{
AddDescription(container, "최소/최대 범위 슬라이더");
var row = CreateRow(container, "Range");
var slider = new UTKMinMaxSlider("Range", 0f, 100f, 25f, 75f);
slider.style.width = 250;
row.Add(slider);
}
private void CreateProgressBarPreview(VisualElement container)
{
AddDescription(container, "프로그레스 바 컴포넌트");
var row1 = CreateRow(container, "25%");
var progress1 = new UTKProgressBar();
progress1.Value = 0.25f;
progress1.style.width = 250;
row1.Add(progress1);
var row2 = CreateRow(container, "50%");
var progress2 = new UTKProgressBar();
progress2.Value = 0.5f;
progress2.style.width = 250;
row2.Add(progress2);
var row3 = CreateRow(container, "75%");
var progress3 = new UTKProgressBar();
progress3.Value = 0.75f;
progress3.style.width = 250;
row3.Add(progress3);
var row4 = CreateRow(container, "100%");
var progress4 = new UTKProgressBar();
progress4.Value = 1.0f;
progress4.style.width = 250;
row4.Add(progress4);
}
#endregion
#region Dropdown Previews
private void CreateDropdownPreview(VisualElement container)
{
AddDescription(container, "드롭다운 선택 컴포넌트");
var row1 = CreateRow(container, "Normal");
var dropdown1 = new UTKDropdown("Select Option");
dropdown1.SetOptions(new List<string> { "Option 1", "Option 2", "Option 3", "Option 4" });
dropdown1.SelectedIndex = 0;
row1.Add(dropdown1);
var row2 = CreateRow(container, "Disabled");
var dropdown2 = new UTKDropdown("Disabled");
dropdown2.SetOptions(new List<string> { "Option 1", "Option 2" });
dropdown2.SelectedIndex = 0;
dropdown2.IsEnabled = false;
row2.Add(dropdown2);
}
private enum SampleEnum { Option1, Option2, Option3 }
private void CreateEnumFieldPreview(VisualElement container)
{
AddDescription(container, "Enum 선택 필드");
var row = CreateRow(container, "Enum");
var field = new UTKEnumField("Choice", SampleEnum.Option1);
row.Add(field);
}
#endregion
#region Label Previews
private void CreateLabelPreview(VisualElement container)
{
AddDescription(container, "다양한 크기의 라벨 컴포넌트");
container.Add(new UTKLabel("H1 Heading", UTKLabel.LabelSize.H1));
container.Add(new UTKLabel("H2 Heading", UTKLabel.LabelSize.H2));
container.Add(new UTKLabel("H3 Heading", UTKLabel.LabelSize.H3));
container.Add(new UTKLabel("Body1 Text", UTKLabel.LabelSize.Body1));
container.Add(new UTKLabel("Body2 Text", UTKLabel.LabelSize.Body2));
container.Add(new UTKLabel("Caption Text", UTKLabel.LabelSize.Caption));
}
private void CreateHelpBoxPreview(VisualElement container)
{
AddDescription(container, "도움말 박스 컴포넌트");
container.Add(new UTKHelpBox("This is an info message.", HelpBoxMessageType.Info));
container.Add(new UTKHelpBox("This is a warning message.", HelpBoxMessageType.Warning));
container.Add(new UTKHelpBox("This is an error message.", HelpBoxMessageType.Error));
container.Add(new UTKHelpBox("This is a plain message.", HelpBoxMessageType.None));
}
#endregion
#region List Previews
private void CreateListViewPreview(VisualElement container)
{
AddDescription(container, "가상화된 리스트 뷰 컴포넌트");
var listView = new UTKListView();
listView.style.height = 200;
listView.style.width = 300;
var items = new List<string>();
for (int i = 1; i <= 20; i++)
items.Add($"Item {i}");
listView.makeItem = () => new Label();
listView.bindItem = (element, index) => ((Label)element).text = items[index];
listView.itemsSource = items;
listView.fixedItemHeight = 24;
container.Add(listView);
}
private void CreateTreeViewPreview(VisualElement container)
{
AddDescription(container, "트리 뷰 컴포넌트");
var treeView = new UTKTreeView();
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);
container.Add(treeView);
}
private void CreateMultiColumnListViewPreview(VisualElement container)
{
AddDescription(container, "멀티 컬럼 리스트 뷰 (정렬 가능한 테이블)");
var placeholder = new Label("MultiColumnListView requires Columns and data binding setup.");
placeholder.style.color = new Color(0.6f, 0.6f, 0.6f);
container.Add(placeholder);
var listView = new UTKMultiColumnListView();
listView.style.height = 200;
listView.style.width = 400;
container.Add(listView);
}
private void CreateMultiColumnTreeViewPreview(VisualElement container)
{
AddDescription(container, "멀티 컬럼 트리 뷰 (계층적 테이블)");
var placeholder = new Label("MultiColumnTreeView requires Columns and TreeViewItemData setup.");
placeholder.style.color = new Color(0.6f, 0.6f, 0.6f);
container.Add(placeholder);
var treeView = new UTKMultiColumnTreeView();
treeView.style.height = 200;
treeView.style.width = 400;
container.Add(treeView);
}
private void CreateFoldoutPreview(VisualElement container)
{
AddDescription(container, "접을 수 있는 섹션 컴포넌트");
var foldout1 = new UTKFoldout("Expanded Section", true);
foldout1.Add(new Label("Content inside the foldout"));
foldout1.Add(new Label("More content here"));
container.Add(foldout1);
var foldout2 = new UTKFoldout("Collapsed Section", false);
foldout2.Add(new Label("Hidden content"));
container.Add(foldout2);
}
private void CreateScrollViewPreview(VisualElement container)
{
AddDescription(container, "스크롤 뷰 컴포넌트");
var scrollView = new UTKScrollView();
scrollView.style.height = 150;
scrollView.style.width = 300;
for (int i = 1; i <= 15; i++)
{
scrollView.Add(new Label($"Scrollable Item {i}"));
}
container.Add(scrollView);
}
#endregion
#region Card Previews
private void CreateCardPreview(VisualElement container)
{
AddDescription(container, "카드 컴포넌트");
var row = CreateRow(container, "Cards");
var card1 = new UTKCard("Card Title", "This is the card content.");
card1.style.width = 200;
row.Add(card1);
var card2 = new UTKCard("Another Card", "Different content here.");
card2.style.width = 200;
row.Add(card2);
}
private void CreatePanelPreview(VisualElement container)
{
AddDescription(container, "패널 컴포넌트");
var panel = new UTKPanel("Panel Title");
panel.style.width = 300;
panel.Add(new Label("Panel content goes here"));
panel.Add(new Label("More panel content"));
container.Add(panel);
}
#endregion
#region Tab Previews
private void CreateTabViewPreview(VisualElement container)
{
AddDescription(container, "탭 뷰 컴포넌트");
var tabView = new UTKTabView();
tabView.style.width = 400;
tabView.style.height = 200;
tabView.AddUTKTab("Tab 1", new Label("Content for Tab 1"));
tabView.AddUTKTab("Tab 2", new Label("Content for Tab 2"));
tabView.AddUTKTab("Tab 3", new Label("Content for Tab 3"));
container.Add(tabView);
}
#endregion
#region Modal Previews
private void CreateAlertPreview(VisualElement container)
{
if (_root == null) return;
AddDescription(container, "알림 다이얼로그");
var row = CreateRow(container, "Alerts");
var infoBtn = new UTKButton("Show Info", "", UTKButton.ButtonVariant.Primary);
infoBtn.OnClicked += () => UTKAlert.ShowInfo(_root, "Information", "This is an info message.");
row.Add(infoBtn);
var warnBtn = new UTKButton("Show Warning", "", UTKButton.ButtonVariant.Normal);
warnBtn.OnClicked += () => UTKAlert.ShowWarning(_root, "Warning", "This is a warning message.");
row.Add(warnBtn);
var confirmBtn = new UTKButton("Show Confirm", "", UTKButton.ButtonVariant.Normal);
confirmBtn.OnClicked += () => UTKAlert.ShowConfirm(_root, "Confirm", "Are you sure?",
() => Debug.Log("Confirmed!"),
() => Debug.Log("Cancelled!"));
row.Add(confirmBtn);
}
private void CreateToastPreview(VisualElement container)
{
if (_root == null) return;
AddDescription(container, "토스트 알림");
var row = CreateRow(container, "Toasts");
var infoBtn = new UTKButton("Info Toast", "", UTKButton.ButtonVariant.Primary);
infoBtn.OnClicked += () => UTKToast.ShowInfo(_root, "This is an info toast!", 3000);
row.Add(infoBtn);
var successBtn = new UTKButton("Success Toast", "", UTKButton.ButtonVariant.Normal);
successBtn.OnClicked += () => UTKToast.ShowSuccess(_root, "Operation successful!", 3000);
row.Add(successBtn);
var errorBtn = new UTKButton("Error Toast", "", UTKButton.ButtonVariant.Danger);
errorBtn.OnClicked += () => UTKToast.ShowError(_root, "An error occurred!", 3000);
row.Add(errorBtn);
}
private void CreateTooltipPreview(VisualElement container)
{
AddDescription(container, "툴팁 컴포넌트 (마우스 오버 시 표시)");
var row = CreateRow(container, "Hover over buttons");
var btn1 = new UTKButton("Short Tooltip", "", UTKButton.ButtonVariant.Normal);
UTKTooltipManager.Instance.AttachTooltip(btn1, "This is a short tooltip.");
row.Add(btn1);
var btn2 = new UTKButton("Long Tooltip", "", UTKButton.ButtonVariant.Normal);
UTKTooltipManager.Instance.AttachTooltip(btn2, "This is a longer tooltip message that demonstrates how the tooltip handles multiple lines of text content.");
row.Add(btn2);
}
#endregion
#region Picker Previews
private void CreateColorPickerPreview(VisualElement container)
{
AddDescription(container, "색상 선택 컴포넌트");
var colorLabel = new Label("Selected: #FFFFFFFF");
container.Add(colorLabel);
var colorPicker = new UTKColorPicker();
colorPicker.style.position = Position.Relative;
colorPicker.SetColor(Color.white);
colorPicker.OnColorChanged += (color) =>
{
colorLabel.text = $"Selected: #{ColorUtility.ToHtmlStringRGBA(color)}";
};
container.Add(colorPicker);
}
private void CreateDatePickerPreview(VisualElement container)
{
AddDescription(container, "날짜 선택 컴포넌트");
var dateLabel = new Label($"Selected: {DateTime.Now:yyyy-MM-dd}");
container.Add(dateLabel);
var datePicker = new UTKDatePicker();
datePicker.style.position = Position.Relative;
datePicker.OnDateSelected += (date) =>
{
dateLabel.text = $"Selected: {date:yyyy-MM-dd HH:mm}";
};
container.Add(datePicker);
}
#endregion
#region Helper Methods
private void AddDescription(VisualElement container, string text)
{
var desc = new Label(text);
desc.AddToClassList(UssClasses.SectionDesc);
container.Add(desc);
}
private VisualElement CreateRow(VisualElement container, string label)
{
var section = new VisualElement();
section.AddToClassList(UssClasses.Section);
container.Add(section);
var titleLabel = new Label(label);
titleLabel.AddToClassList(UssClasses.SectionTitle);
section.Add(titleLabel);
var row = new VisualElement();
row.AddToClassList(UssClasses.Row);
section.Add(row);
return row;
}
#endregion
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 48d660dfd4bf99244b62f5c6f02224c5

View File

@@ -0,0 +1,497 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1097328750
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1097328752}
- component: {fileID: 1097328754}
- component: {fileID: 1097328755}
m_Layer: 0
m_Name: Sample
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1097328752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1097328754
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
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}
m_SortingOrder: 0
m_Position: 0
m_WorldSpaceSizeMode: 1
m_WorldSpaceWidth: 1920
m_WorldSpaceHeight: 1080
m_PivotReferenceSize: 0
m_Pivot: 0
m_WorldSpaceCollider: {fileID: 0}
--- !u!114 &1097328755
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1097328750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 48d660dfd4bf99244b62f5c6f02224c5, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UTKStyleGuideSample
uiDocument: {fileID: 1097328754}
initialTheme: 0
--- !u!1 &1331954412
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1331954415}
- component: {fileID: 1331954414}
- component: {fileID: 1331954413}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1331954413
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1
m_XRTrackingOrigin: {fileID: 0}
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_DeselectOnBackgroundClick: 0
m_PointerBehavior: 0
m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
--- !u!114 &1331954414
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1331954415
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331954412}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1414861612
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1414861614}
- component: {fileID: 1414861613}
- component: {fileID: 1414861615}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1414861613
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1414861614
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &1414861615
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1414861612}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_CustomShadowLayers: 0
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2136622002}
- component: {fileID: 2136622001}
- component: {fileID: 2136622000}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &2136622000
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
--- !u!20 &2136622001
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &2136622002
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2136621999}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 2136622002}
- {fileID: 1414861614}
- {fileID: 1331954415}
- {fileID: 1097328752}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e9eed1940cd247f4cbb17191de66e853
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: