From b5b815170ff4047ef13d3691c5f0b1d8812a34be Mon Sep 17 00:00:00 2001 From: logonkhi Date: Wed, 24 Dec 2025 19:05:54 +0900 Subject: [PATCH] =?UTF-8?q?UIToolkitTreeList=20=EA=B0=9C=EB=B0=9C=20?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/UIToolkit.meta | 8 + Assets/Resources/UIToolkit/Images.meta | 8 + .../UIToolkit/Images/btn_cancel_64.png | Bin 0 -> 1821 bytes .../UIToolkit/Images/btn_cancel_64.png.meta | 143 ++++ .../UIToolkit/Images/button_close_22.png | Bin 0 -> 209 bytes .../UIToolkit/Images/button_close_22.png.meta | 117 ++++ .../UIToolkit/Images/icon_search_16x17.png | Bin 0 -> 451 bytes .../Images/icon_search_16x17.png.meta | 143 ++++ Assets/Resources/UIToolkit/List.meta | 8 + .../UIToolkit/List/UIToolkitTreeList.uss | 254 +++++++ .../UIToolkit/List/UIToolkitTreeList.uss.meta | 11 + .../UIToolkit/List/UIToolkitTreeList.uxml | 14 + .../List/UIToolkitTreeList.uxml.meta | 10 + .../UIToolkit/List/UIToolkitTreeListItem.uxml | 39 ++ .../List/UIToolkitTreeListItem.uxml.meta | 10 + Assets/Scripts/UVC/UIToolkit.meta | 8 + Assets/Scripts/UVC/UIToolkit/List.meta | 8 + .../UVC/UIToolkit/List/UIToolkitTreeList.cs | 623 ++++++++++++++++++ .../UIToolkit/List/UIToolkitTreeList.cs.meta | 2 + .../List/UIToolkitTreeListItemData.cs | 121 ++++ .../List/UIToolkitTreeListItemData.cs.meta | 2 + Assets/Scripts/UVC/UIToolkit/Window.meta | 8 + 22 files changed, 1537 insertions(+) create mode 100644 Assets/Resources/UIToolkit.meta create mode 100644 Assets/Resources/UIToolkit/Images.meta create mode 100644 Assets/Resources/UIToolkit/Images/btn_cancel_64.png create mode 100644 Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta create mode 100644 Assets/Resources/UIToolkit/Images/button_close_22.png create mode 100644 Assets/Resources/UIToolkit/Images/button_close_22.png.meta create mode 100644 Assets/Resources/UIToolkit/Images/icon_search_16x17.png create mode 100644 Assets/Resources/UIToolkit/Images/icon_search_16x17.png.meta create mode 100644 Assets/Resources/UIToolkit/List.meta create mode 100644 Assets/Resources/UIToolkit/List/UIToolkitTreeList.uss create mode 100644 Assets/Resources/UIToolkit/List/UIToolkitTreeList.uss.meta create mode 100644 Assets/Resources/UIToolkit/List/UIToolkitTreeList.uxml create mode 100644 Assets/Resources/UIToolkit/List/UIToolkitTreeList.uxml.meta create mode 100644 Assets/Resources/UIToolkit/List/UIToolkitTreeListItem.uxml create mode 100644 Assets/Resources/UIToolkit/List/UIToolkitTreeListItem.uxml.meta create mode 100644 Assets/Scripts/UVC/UIToolkit.meta create mode 100644 Assets/Scripts/UVC/UIToolkit/List.meta create mode 100644 Assets/Scripts/UVC/UIToolkit/List/UIToolkitTreeList.cs create mode 100644 Assets/Scripts/UVC/UIToolkit/List/UIToolkitTreeList.cs.meta create mode 100644 Assets/Scripts/UVC/UIToolkit/List/UIToolkitTreeListItemData.cs create mode 100644 Assets/Scripts/UVC/UIToolkit/List/UIToolkitTreeListItemData.cs.meta create mode 100644 Assets/Scripts/UVC/UIToolkit/Window.meta diff --git a/Assets/Resources/UIToolkit.meta b/Assets/Resources/UIToolkit.meta new file mode 100644 index 00000000..69a0e951 --- /dev/null +++ b/Assets/Resources/UIToolkit.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 166e6c1e42c1dee4a836845108ff7782 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UIToolkit/Images.meta b/Assets/Resources/UIToolkit/Images.meta new file mode 100644 index 00000000..79a5c5a9 --- /dev/null +++ b/Assets/Resources/UIToolkit/Images.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7592dc8b147efba4c87e224db8ad6411 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UIToolkit/Images/btn_cancel_64.png b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png new file mode 100644 index 0000000000000000000000000000000000000000..7894909f2d82d4df535480ea575453c8e752bc1e GIT binary patch literal 1821 zcmV+&2jcjNP)!)U+6j51i-%~!ahmh921PDd}-ywI2z}_JDkjuz9Q&LzYaJHsZr6fm;iu0!ryZwm2Pi8{2iuv7Wosok32!1 zAu6lwJZ0%@F?JZajik~eeCPb8#s%$*2mpY-_0%_UieQv31s)44419}RLPW;biD7=` zCAz1ZXAwZ)THO_V%)Rt3>5Ew3R9iIxc+zc2tGl)RS|E|T zwxd-Y+Yb>D@o&WD%MM$lE8SF00H$6cHr)i+QQNpy9baEz`x;_X44c&n>Qw~5aBSM^ zI=vED-Gd4w{E8dhJ;*+!1jb&$7K#bL@KZaOx`NNG)TpeNAVIgy7zr_~Q6NPG5WL^A z4vlEq?_2O5NJoOb9FBuIb$9YZU0y^0nvaoT(t@|=(|!nGScU{$4t8PG{$!{YEl&~v zlcQ}d4zmj$WAqIii+Y^VSYi)MS{MWCj2mGO6sSxRfX-E9n4$d=;RYd~6Q^B9;e8^^0V*S|D z?lr2PBmnJO$S~a;R#N2-z-$r#J3IIRCX3a^(yQhOIMZuUAh6=w9=e(-)g&|u9<&=h zTTt#rPnLW+$a4e)inWzm5*h}-!S~cdl|Gy(0f3oWXnF&=0zisp0{&V|dkZBX0UyzI zAW8t1zC(s7dFvZ0#mZA80Bnum1;t`Mtwt*;0_;BeZ#%H2o+AM}+BA^`X>zp>wBr>^ zfQ`wGN)cdhfp(wm2G@LKNU&yF1TUNa>ti4`CfBuR1jt(f39W*cyZ`htkSYQO<6N=H zqUbE;KZ1oTuR7UVWGgiTirAZkU=%V7p4Y6}G5SG?{7chrV{+Z41bpta7km^1@2$5Y zVG#j#)em-s9%*Tw30}KJi8a-N1bf@FF*%>98DMWAvkAxruSHP;k~K)Mw>=vZZa4AQ z-*3jII= zO8%tmmAV4Dv$nUbNWi~+g`RwRog=`$)V$cmm(6fKD|m0T5eYhN;!P?~{*+G=0Fco& zLvVIsk?~&WUlhDIgzwpx0~kgau{Vmv`$`hfDcI*}54!f6Y}WP`&?ypv#VrEFz7Mc5 z1Vgd}0OI#Rd$ZAN@#L8w^eyOF!F!*z_W1TkPkyjrWANr(o+ZF(Y&Q0_)16J`4~L$F zMZtR)mG*Q3%@0*>v8yeRNdf?%*G|D8n9jb2W{i%#h=^d^+)9bP7$(Mzuv-k11at%J zPVEQ|i*Jjajn%Rai+$vkI#v_lC?WtR^=;a%ImN@U-hYnx8=*row zhyYoD1pD4i&DQ|1ZzSMbfsbY)SatkP_$H;809nHDR=E+8Falw8npX*4ySg7yet+i6-_KTYZw zKZEQr7JI&T6l|~Qt4h@b$U2U6h%t6KsQVTm-yk|xqxxdOmOl^~-HC!nsXBN8n?-;I zO5~ONAH*hYSM|RDVBd|dQ>&b+GuR!qr$2QhR;zvLi(uGvT10@%L&CS@xqGhG2V!wa zGvfiJ9}xZHgpSgjqj#Xe4ntJ+;-EaqqxPZJ^InKm;hOY1b>wEH`OzunW4vP zdVQ^JtKJIf0G9R`I?toN%y8GG(`mTeHaUvhga8MN4^aJ#XiD1G)ATM*I!!L~$=~*K zJTxW10|2E1OI>%1mnv~*JGed;vy4EG2 z;53aTDyvPWKHdKdY~TOs{|9ER?xh%4nE@&1#3VxQl3zg-oLk7cvfA{I6WV8_Of+xb zQv#Z!Z(#6%fCeOf)FwXq8L*W7cK`qY|NjvZ4XXeE00v1!K~w_(*N(rR<)`3g00000 LNkvXXu0mjf=w(w9 literal 0 HcmV?d00001 diff --git a/Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta new file mode 100644 index 00000000..231030e4 --- /dev/null +++ b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 9dd52303744ec104bb941cd8271e0668 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UIToolkit/Images/button_close_22.png b/Assets/Resources/UIToolkit/Images/button_close_22.png new file mode 100644 index 0000000000000000000000000000000000000000..fa22e0e2eb7ba69c447d1e89e0593c1ab5aff984 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4f8mSSUX`Y^13>-iXBZDC$69XTR zB?ZJF;FOq`k{OnnTCQNOXK3*6E9WnuV2Y=UV~9oX+slr84uU)^0r!vYkThT4x_?HC zS=3#D%|ep;6PGFOxg)N0N^b5$#;+j@ga7wQ>C5nC1TGZX*L$wOyrfBgapA>(GdA1) ysLfoECi3oEL1sXjj981T$b-mk_5O3G8#CR1oU&Z<^hebvxGBftg9Gs-R zy*-^cb1cg;J&t1uf51}04SYWgLv@0&fbls<)3nB~V3)0G+ji@33NP89+7=2Fz#Q=- ztu3|$?jHds*#I4E@)MLEeUMU03n2)@fVp?u5vW$!gF2K9FHsBHWK z6)Kc$_j8KrQ7s7QhC#ANEWv&N_Ss34G<&G~wDKGOuJ{Z@@;h8RX9QFML5ml;p^q`< z2fj;^ #unity-text-input { + padding-top: 4px; + padding-right: 24px; /* 오른쪽 아이콘 공간 확보 */ + padding-bottom: 4px; + padding-left: 4px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top-width: 0; /* 테두리 제거 */ + border-right-width: 0; + border-bottom-width: 0; + border-left-width: 0; +} + +/* =================================== + 체크박스 스타일 + =================================== */ +#unity-checkmark { + -unity-background-image-tint-color: rgb(255, 255, 255); +} + +/* =================================== + TreeView 기본 설정 + =================================== */ +#main-tree-view { + --unity-item-indent-width: 10; /* 계층별 들여쓰기 너비 */ +} + +/* 펼침/접기 토글 아이콘 컨테이너 */ +#unity-tree-view__item-toggle > VisualElement > VisualElement { + margin-left: 0; + margin-right: 0; + width: 22px; /* 토글 아이콘 너비 */ +} + +/* 펼침/접기 토글 버튼 */ +.unity-tree-view__item-toggle { + margin-right: 5px; /* 라벨과의 간격 */ +} + +/* =================================== + 항목 배경색 스타일 + 기본, 호버, 선택 상태별 배경색 + =================================== */ + +/* 기본 상태: 투명 배경 */ +.unity-collection-view__item { + background-color: rgba(50, 50, 50, 0); +} + +/* 호버 상태: 반투명 파란색 배경 */ +.unity-collection-view__item:hover { + background-color: rgba(0, 10, 37, 0.25); +} + +/* 선택 상태: 더 진한 반투명 파란색 배경 */ +.unity-collection-view__item--selected { + background-color: rgba(0, 10, 37, 0.5); +} + +/* =================================== + 가시성 토글 버튼 스타일 + 눈 아이콘으로 3D 모델 가시성 제어 + =================================== */ +.visibility-toggle { + background-color: rgba(0, 0, 0, 0); /* 투명 배경 */ + border-width: 0; /* 테두리 없음 */ + width: 16px; + height: 16px; + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + align-items: center; + justify-content: center; + padding-right: 0; + padding-left: 0; + margin-left: 0; + flex-shrink: 0; /* 크기 축소 방지 */ + background-image: resource('SHI/Images/icon_visibility_on_64'); /* 기본: 보이는 상태 */ +} + +/* 가시성 켜짐 상태 (눈 열린 아이콘) */ +.visibility-on { + background-image: resource('SHI/Images/icon_visibility_on_64'); +} + +/* 가시성 꺼짐 상태 (눈 닫힌 아이콘) */ +.visibility-off { + background-image: resource('SHI/Images/icon_visibility_off_64'); +} + +/* =================================== + 세로 스크롤바 스타일 + 슬림한 6px 너비의 커스텀 스크롤바 + =================================== */ +.unity-scroller--vertical { + width: 6px; /* 슬림한 너비 */ + margin-right: 4px; + margin-bottom: 0px; +} + +/* 세로 스크롤바 트랙 (배경) */ +.unity-scroller--vertical .unity-base-slider__tracker { + background-color: rgba(255, 255, 255, 0); /* 흰색 배경 */ + border-width: 0; +} + +/* 세로 스크롤바 드래거 컨테이너 위치 조정 */ +.unity-scroller--vertical .unity-base-slider__drag-container { + left: 0; + right: 0; +} + +/* 세로 스크롤바 드래거 (핸들) */ +.unity-scroller--vertical .unity-base-slider__dragger { + background-color: rgb(216, 216, 216); /* 밝은 회색 */ + border-width: 0; + border-radius: 3px; /* 둥근 모서리 */ + width: 6px; + left: 0; +} + +/* 세로 스크롤바 화살표 버튼 숨김 */ +.unity-scroller--vertical .unity-repeat-button { + display: none; + width: 0; + height: 0; + min-width: 0; + min-height: 0; +} + +/* 세로 스크롤바 슬라이더 마진 제거 */ +.unity-scroller--vertical .unity-slider { + margin: 0; +} + +/* 세로 스크롤바 입력 필드 크기 조정 */ +.unity-scroller--vertical .unity-base-field__input { + width: 6px; + min-width: 6px; +} + +/* =================================== + 가로 스크롤바 스타일 + 슬림한 6px 높이의 커스텀 스크롤바 + =================================== */ +.unity-scroller--horizontal { + height: 6px; /* 슬림한 높이 */ + margin-bottom: 4px; + margin-right: 0px; +} + +/* 가로 스크롤바 트랙 (배경) */ +.unity-scroller--horizontal .unity-base-slider__tracker { + background-color: rgba(255, 255, 255, 0); /* 흰색 배경 */ + border-width: 0; +} + +/* 가로 스크롤바 드래거 컨테이너 위치 조정 */ +.unity-scroller--horizontal .unity-base-slider__drag-container { + top: 0; + bottom: 0; +} + +/* 가로 스크롤바 드래거 (핸들) */ +.unity-scroller--horizontal .unity-base-slider__dragger { + background-color: rgb(216, 216, 216); /* 밝은 회색 */ + border-width: 0; + border-radius: 3px; /* 둥근 모서리 */ + height: 6px; + top: 0; +} + +/* 가로 스크롤바 화살표 버튼 숨김 */ +.unity-scroller--horizontal .unity-repeat-button { + display: none; + width: 0; + height: 0; + min-width: 0; + min-height: 0; +} + +/* 가로 스크롤바 슬라이더 마진 제거 */ +.unity-scroller--horizontal .unity-slider { + margin: 0; +} + +/* 가로 스크롤바 입력 필드 크기 조정 */ +.unity-scroller--horizontal .unity-base-field__input { + height: 6px; + min-height: 6px; +} diff --git a/Assets/Resources/UIToolkit/List/UIToolkitTreeList.uss.meta b/Assets/Resources/UIToolkit/List/UIToolkitTreeList.uss.meta new file mode 100644 index 00000000..9b70be23 --- /dev/null +++ b/Assets/Resources/UIToolkit/List/UIToolkitTreeList.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0076250b40d2ac45ab1bff4cd47920c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/Assets/Resources/UIToolkit/List/UIToolkitTreeList.uxml b/Assets/Resources/UIToolkit/List/UIToolkitTreeList.uxml new file mode 100644 index 00000000..0f91897d --- /dev/null +++ b/Assets/Resources/UIToolkit/List/UIToolkitTreeList.uxml @@ -0,0 +1,14 @@ + +