StyleGuide Sample 완료
This commit is contained in:
@@ -9,6 +9,38 @@ namespace UVC.UIToolkit
|
||||
/// 접을 수 있는 섹션 컴포넌트.
|
||||
/// Unity Foldout을 래핑하여 커스텀 스타일을 적용합니다.
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// <para><b>C# 코드에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// // 기본 폴드아웃
|
||||
/// var foldout = new UTKFoldout("고급 설정", expanded: false);
|
||||
/// foldout.Add(new Label("옵션 1"));
|
||||
/// foldout.Add(new Label("옵션 2"));
|
||||
///
|
||||
/// // 상태 변경 이벤트
|
||||
/// foldout.OnValueChanged += (isExpanded) => {
|
||||
/// Debug.Log(isExpanded ? "펼쳐짐" : "접힘");
|
||||
/// };
|
||||
///
|
||||
/// // 프로그래밍 방식으로 상태 제어
|
||||
/// foldout.IsExpanded = true;
|
||||
/// </code>
|
||||
/// <para><b>UXML에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
|
||||
/// <!-- 기본 폴드아웃 -->
|
||||
/// <utk:UTKFoldout text="설정" value="true">
|
||||
/// <ui:Label text="내용 1" />
|
||||
/// <ui:Label text="내용 2" />
|
||||
/// </utk:UTKFoldout>
|
||||
///
|
||||
/// <!-- 접힌 상태 -->
|
||||
/// <utk:UTKFoldout text="고급 옵션" value="false">
|
||||
/// <ui:Label text="숨겨진 내용" />
|
||||
/// </utk:UTKFoldout>
|
||||
/// </ui:UXML>
|
||||
/// </code>
|
||||
/// </example>
|
||||
[UxmlElement]
|
||||
public partial class UTKFoldout : Foldout, IDisposable
|
||||
{
|
||||
|
||||
@@ -9,6 +9,44 @@ namespace UVC.UIToolkit
|
||||
/// 도움말 박스 컴포넌트.
|
||||
/// Unity HelpBox를 래핑하여 커스텀 스타일을 적용합니다.
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// <para><b>C# 코드에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// // 정보 메시지
|
||||
/// var infoBox = new UTKHelpBox()
|
||||
/// {
|
||||
/// Message = "이 기능은 베타 버전입니다.",
|
||||
/// messageType = HelpBoxMessageType.Info
|
||||
/// };
|
||||
///
|
||||
/// // 경고 메시지
|
||||
/// var warningBox = new UTKHelpBox()
|
||||
/// {
|
||||
/// Message = "주의: 되돌릴 수 없습니다.",
|
||||
/// messageType = HelpBoxMessageType.Warning
|
||||
/// };
|
||||
///
|
||||
/// // 오류 메시지
|
||||
/// var errorBox = new UTKHelpBox()
|
||||
/// {
|
||||
/// Message = "오류: 파일을 찾을 수 없습니다.",
|
||||
/// messageType = HelpBoxMessageType.Error
|
||||
/// };
|
||||
/// </code>
|
||||
/// <para><b>UXML에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
|
||||
/// <!-- 정보 -->
|
||||
/// <utk:UTKHelpBox text="정보 메시지입니다." message-type="Info" />
|
||||
///
|
||||
/// <!-- 경고 -->
|
||||
/// <utk:UTKHelpBox text="경고 메시지입니다." message-type="Warning" />
|
||||
///
|
||||
/// <!-- 오류 -->
|
||||
/// <utk:UTKHelpBox text="오류 메시지입니다." message-type="Error" />
|
||||
/// </ui:UXML>
|
||||
/// </code>
|
||||
/// </example>
|
||||
[UxmlElement]
|
||||
public partial class UTKHelpBox : HelpBox, IDisposable
|
||||
{
|
||||
|
||||
359
Assets/Scripts/UVC/UIToolkit/Common/UTKImageIcons.cs
Normal file
359
Assets/Scripts/UVC/UIToolkit/Common/UTKImageIcons.cs
Normal file
@@ -0,0 +1,359 @@
|
||||
// <auto-generated>
|
||||
// 이 파일은 UTKImageIconsGenerator에 의해 자동 생성되었습니다.
|
||||
// 직접 수정하지 마세요. Tools > UTK > Image Icons Generator 메뉴로 재생성하세요.
|
||||
// Source: Assets/Resources/UIToolkit/Images
|
||||
// </auto-generated>
|
||||
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UVC.UIToolkit
|
||||
{
|
||||
/// <summary>
|
||||
/// 이미지 아이콘 리소스 경로 상수 클래스입니다.
|
||||
/// 총 41개의 아이콘을 포함합니다.
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 상수로 리소스 경로 사용
|
||||
/// string path = UTKImageIcons.Home;
|
||||
///
|
||||
/// // 동기 Sprite 로드 (캐싱됨)
|
||||
/// Sprite sprite = UTKImageIcons.LoadSprite(UTKImageIcons.Home);
|
||||
///
|
||||
/// // 비동기 Sprite 로드 (UniTask, 캐싱됨)
|
||||
/// Sprite? sprite = await UTKImageIcons.LoadSpriteAsync(UTKImageIcons.Home, cancellationToken);
|
||||
///
|
||||
/// // 동기 Texture2D 로드 (캐싱됨)
|
||||
/// Texture2D texture = UTKImageIcons.LoadTexture(UTKImageIcons.Settings);
|
||||
///
|
||||
/// // 비동기 Texture2D 로드 (UniTask, 캐싱됨)
|
||||
/// Texture2D? texture = await UTKImageIcons.LoadTextureAsync(UTKImageIcons.Settings, cancellationToken);
|
||||
///
|
||||
/// // 이름으로 Sprite 로드
|
||||
/// Sprite icon = UTKImageIcons.LoadSpriteByName("home");
|
||||
///
|
||||
/// // 이름으로 비동기 Sprite 로드
|
||||
/// Sprite? icon = await UTKImageIcons.LoadSpriteByNameAsync("home", cancellationToken);
|
||||
///
|
||||
/// // 이름으로 경로 조회
|
||||
/// string iconPath = UTKImageIcons.GetPath("settings");
|
||||
///
|
||||
/// // 아이콘 존재 여부 확인
|
||||
/// if (UTKImageIcons.HasIcon("search")) { }
|
||||
///
|
||||
/// // 전체 아이콘 이름 순회
|
||||
/// foreach (var name in UTKImageIcons.GetAllIconNames()) { }
|
||||
///
|
||||
/// // 캐시 클리어
|
||||
/// UTKImageIcons.ClearCache();
|
||||
/// </code>
|
||||
/// </example>
|
||||
/// <remarks>
|
||||
/// <para><b>UXML에서 사용하기:</b></para>
|
||||
/// <para>UXML에서 이미지 아이콘을 사용하려면 USS에서 background-image를 설정합니다.</para>
|
||||
/// <code>
|
||||
/// /* USS 파일 */
|
||||
/// .my-icon {
|
||||
/// width: 24px;
|
||||
/// height: 24px;
|
||||
/// background-image: resource('UIToolkit/Images/icon_setting_22');
|
||||
/// }
|
||||
/// </code>
|
||||
/// <code>
|
||||
/// <!-- UXML 파일 -->
|
||||
/// <ui:VisualElement class="my-icon" />
|
||||
/// </code>
|
||||
/// <para><b>C# 코드에서 UXML 요소에 이미지 적용:</b></para>
|
||||
/// <code>
|
||||
/// var iconElement = root.Q<VisualElement>("my-icon");
|
||||
/// var texture = UTKImageIcons.LoadTextureByName("icon_setting_22");
|
||||
/// iconElement.style.backgroundImage = new StyleBackground(texture);
|
||||
/// </code>
|
||||
/// <para><b>Image 요소에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// var image = root.Q<Image>("my-image");
|
||||
/// image.sprite = UTKImageIcons.LoadSpriteByName("btn_close_16");
|
||||
/// </code>
|
||||
/// </remarks>
|
||||
public static class UTKImageIcons
|
||||
{
|
||||
/// <summary>btn_cancel_64.png</summary>
|
||||
public const string BtnCancel64 = "UIToolkit/Images/btn_cancel_64";
|
||||
/// <summary>btn_close_16.png</summary>
|
||||
public const string BtnClose16 = "UIToolkit/Images/btn_close_16";
|
||||
/// <summary>btn_close_22.png</summary>
|
||||
public const string BtnClose22 = "UIToolkit/Images/btn_close_22";
|
||||
/// <summary>cursor_arc_32.png</summary>
|
||||
public const string CursorArc32 = "UIToolkit/Images/cursor_arc_32";
|
||||
/// <summary>cursor_ask_32.png</summary>
|
||||
public const string CursorAsk32 = "UIToolkit/Images/cursor_ask_32";
|
||||
/// <summary>cursor_context_menu_32.png</summary>
|
||||
public const string CursorContextMenu32 = "UIToolkit/Images/cursor_context_menu_32";
|
||||
/// <summary>cursor_copy_32.png</summary>
|
||||
public const string CursorCopy32 = "UIToolkit/Images/cursor_copy_32";
|
||||
/// <summary>cursor_default_black_32.png</summary>
|
||||
public const string CursorDefaultBlack32 = "UIToolkit/Images/cursor_default_black_32";
|
||||
/// <summary>cursor_default_white_32.png</summary>
|
||||
public const string CursorDefaultWhite32 = "UIToolkit/Images/cursor_default_white_32";
|
||||
/// <summary>cursor_export_32.png</summary>
|
||||
public const string CursorExport32 = "UIToolkit/Images/cursor_export_32";
|
||||
/// <summary>cursor_grabbing_32.png</summary>
|
||||
public const string CursorGrabbing32 = "UIToolkit/Images/cursor_grabbing_32";
|
||||
/// <summary>cursor_hand_32.png</summary>
|
||||
public const string CursorHand32 = "UIToolkit/Images/cursor_hand_32";
|
||||
/// <summary>cursor_link_32.png</summary>
|
||||
public const string CursorLink32 = "UIToolkit/Images/cursor_link_32";
|
||||
/// <summary>cursor_move_32.png</summary>
|
||||
public const string CursorMove32 = "UIToolkit/Images/cursor_move_32";
|
||||
/// <summary>cursor_node_32.png</summary>
|
||||
public const string CursorNode32 = "UIToolkit/Images/cursor_node_32";
|
||||
/// <summary>cursor_point_white_32.png</summary>
|
||||
public const string CursorPointWhite32 = "UIToolkit/Images/cursor_point_white_32";
|
||||
/// <summary>cursor_resize_col_32.png</summary>
|
||||
public const string CursorResizeCol32 = "UIToolkit/Images/cursor_resize_col_32";
|
||||
/// <summary>cursor_resize_down_32.png</summary>
|
||||
public const string CursorResizeDown32 = "UIToolkit/Images/cursor_resize_down_32";
|
||||
/// <summary>cursor_resize_h_32.png</summary>
|
||||
public const string CursorResizeH32 = "UIToolkit/Images/cursor_resize_h_32";
|
||||
/// <summary>cursor_resize_left_32.png</summary>
|
||||
public const string CursorResizeLeft32 = "UIToolkit/Images/cursor_resize_left_32";
|
||||
/// <summary>cursor_resize_right_32.png</summary>
|
||||
public const string CursorResizeRight32 = "UIToolkit/Images/cursor_resize_right_32";
|
||||
/// <summary>cursor_resize_row_32.png</summary>
|
||||
public const string CursorResizeRow32 = "UIToolkit/Images/cursor_resize_row_32";
|
||||
/// <summary>cursor_resize_tlbr_32.png</summary>
|
||||
public const string CursorResizeTlbr32 = "UIToolkit/Images/cursor_resize_tlbr_32";
|
||||
/// <summary>cursor_resize_trbl_32.png</summary>
|
||||
public const string CursorResizeTrbl32 = "UIToolkit/Images/cursor_resize_trbl_32";
|
||||
/// <summary>cursor_resize_up_32.png</summary>
|
||||
public const string CursorResizeUp32 = "UIToolkit/Images/cursor_resize_up_32";
|
||||
/// <summary>cursor_resize_v_32.png</summary>
|
||||
public const string CursorResizeV32 = "UIToolkit/Images/cursor_resize_v_32";
|
||||
/// <summary>cursor_rotate_bottom_left_32.png</summary>
|
||||
public const string CursorRotateBottomLeft32 = "UIToolkit/Images/cursor_rotate_bottom_left_32";
|
||||
/// <summary>cursor_rotate_bottom_right_32.png</summary>
|
||||
public const string CursorRotateBottomRight32 = "UIToolkit/Images/cursor_rotate_bottom_right_32";
|
||||
/// <summary>cursor_rotate_top_left_32.png</summary>
|
||||
public const string CursorRotateTopLeft32 = "UIToolkit/Images/cursor_rotate_top_left_32";
|
||||
/// <summary>cursor_rotate_top_right_32.png</summary>
|
||||
public const string CursorRotateTopRight32 = "UIToolkit/Images/cursor_rotate_top_right_32";
|
||||
/// <summary>cursor_select_32.png</summary>
|
||||
public const string CursorSelect32 = "UIToolkit/Images/cursor_select_32";
|
||||
/// <summary>cursor_wait_32.png</summary>
|
||||
public const string CursorWait32 = "UIToolkit/Images/cursor_wait_32";
|
||||
/// <summary>cursor_zoom_in_32.png</summary>
|
||||
public const string CursorZoomIn32 = "UIToolkit/Images/cursor_zoom_in_32";
|
||||
/// <summary>cursor_zoom_out_32.png</summary>
|
||||
public const string CursorZoomOut32 = "UIToolkit/Images/cursor_zoom_out_32";
|
||||
/// <summary>icon_down_20x16.png</summary>
|
||||
public const string IconDown20x16 = "UIToolkit/Images/icon_down_20x16";
|
||||
/// <summary>icon_down_22.png</summary>
|
||||
public const string IconDown22 = "UIToolkit/Images/icon_down_22";
|
||||
/// <summary>icon_eye_22x16.png</summary>
|
||||
public const string IconEye22x16 = "UIToolkit/Images/icon_eye_22x16";
|
||||
/// <summary>icon_eye_close_22x16.png</summary>
|
||||
public const string IconEyeClose22x16 = "UIToolkit/Images/icon_eye_close_22x16";
|
||||
/// <summary>icon_right_22.png</summary>
|
||||
public const string IconRight22 = "UIToolkit/Images/icon_right_22";
|
||||
/// <summary>icon_search_22x16.png</summary>
|
||||
public const string IconSearch22x16 = "UIToolkit/Images/icon_search_22x16";
|
||||
/// <summary>icon_setting_22.png</summary>
|
||||
public const string IconSetting22 = "UIToolkit/Images/icon_setting_22";
|
||||
|
||||
#region Lookup & Load
|
||||
|
||||
private static readonly Dictionary<string, string> _pathsByName = new()
|
||||
{
|
||||
["btn_cancel_64"] = "UIToolkit/Images/btn_cancel_64",
|
||||
["btn_close_16"] = "UIToolkit/Images/btn_close_16",
|
||||
["btn_close_22"] = "UIToolkit/Images/btn_close_22",
|
||||
["cursor_arc_32"] = "UIToolkit/Images/cursor_arc_32",
|
||||
["cursor_ask_32"] = "UIToolkit/Images/cursor_ask_32",
|
||||
["cursor_context_menu_32"] = "UIToolkit/Images/cursor_context_menu_32",
|
||||
["cursor_copy_32"] = "UIToolkit/Images/cursor_copy_32",
|
||||
["cursor_default_black_32"] = "UIToolkit/Images/cursor_default_black_32",
|
||||
["cursor_default_white_32"] = "UIToolkit/Images/cursor_default_white_32",
|
||||
["cursor_export_32"] = "UIToolkit/Images/cursor_export_32",
|
||||
["cursor_grabbing_32"] = "UIToolkit/Images/cursor_grabbing_32",
|
||||
["cursor_hand_32"] = "UIToolkit/Images/cursor_hand_32",
|
||||
["cursor_link_32"] = "UIToolkit/Images/cursor_link_32",
|
||||
["cursor_move_32"] = "UIToolkit/Images/cursor_move_32",
|
||||
["cursor_node_32"] = "UIToolkit/Images/cursor_node_32",
|
||||
["cursor_point_white_32"] = "UIToolkit/Images/cursor_point_white_32",
|
||||
["cursor_resize_col_32"] = "UIToolkit/Images/cursor_resize_col_32",
|
||||
["cursor_resize_down_32"] = "UIToolkit/Images/cursor_resize_down_32",
|
||||
["cursor_resize_h_32"] = "UIToolkit/Images/cursor_resize_h_32",
|
||||
["cursor_resize_left_32"] = "UIToolkit/Images/cursor_resize_left_32",
|
||||
["cursor_resize_right_32"] = "UIToolkit/Images/cursor_resize_right_32",
|
||||
["cursor_resize_row_32"] = "UIToolkit/Images/cursor_resize_row_32",
|
||||
["cursor_resize_tlbr_32"] = "UIToolkit/Images/cursor_resize_tlbr_32",
|
||||
["cursor_resize_trbl_32"] = "UIToolkit/Images/cursor_resize_trbl_32",
|
||||
["cursor_resize_up_32"] = "UIToolkit/Images/cursor_resize_up_32",
|
||||
["cursor_resize_v_32"] = "UIToolkit/Images/cursor_resize_v_32",
|
||||
["cursor_rotate_bottom_left_32"] = "UIToolkit/Images/cursor_rotate_bottom_left_32",
|
||||
["cursor_rotate_bottom_right_32"] = "UIToolkit/Images/cursor_rotate_bottom_right_32",
|
||||
["cursor_rotate_top_left_32"] = "UIToolkit/Images/cursor_rotate_top_left_32",
|
||||
["cursor_rotate_top_right_32"] = "UIToolkit/Images/cursor_rotate_top_right_32",
|
||||
["cursor_select_32"] = "UIToolkit/Images/cursor_select_32",
|
||||
["cursor_wait_32"] = "UIToolkit/Images/cursor_wait_32",
|
||||
["cursor_zoom_in_32"] = "UIToolkit/Images/cursor_zoom_in_32",
|
||||
["cursor_zoom_out_32"] = "UIToolkit/Images/cursor_zoom_out_32",
|
||||
["icon_down_20x16"] = "UIToolkit/Images/icon_down_20x16",
|
||||
["icon_down_22"] = "UIToolkit/Images/icon_down_22",
|
||||
["icon_eye_22x16"] = "UIToolkit/Images/icon_eye_22x16",
|
||||
["icon_eye_close_22x16"] = "UIToolkit/Images/icon_eye_close_22x16",
|
||||
["icon_right_22"] = "UIToolkit/Images/icon_right_22",
|
||||
["icon_search_22x16"] = "UIToolkit/Images/icon_search_22x16",
|
||||
["icon_setting_22"] = "UIToolkit/Images/icon_setting_22",
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, Sprite?> _spriteCache = new();
|
||||
private static readonly Dictionary<string, Texture2D?> _textureCache = new();
|
||||
|
||||
/// <summary>
|
||||
/// 아이콘 이름으로 리소스 경로를 조회합니다.
|
||||
/// </summary>
|
||||
/// <param name="iconName">아이콘 파일명 (확장자 제외)</param>
|
||||
/// <returns>리소스 경로, 없으면 빈 문자열</returns>
|
||||
public static string GetPath(string iconName)
|
||||
{
|
||||
return _pathsByName.TryGetValue(iconName, out var path) ? path : string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 아이콘이 존재하는지 확인합니다.
|
||||
/// </summary>
|
||||
public static bool HasIcon(string iconName) => _pathsByName.ContainsKey(iconName);
|
||||
|
||||
/// <summary>
|
||||
/// 모든 아이콘 이름 목록을 반환합니다.
|
||||
/// </summary>
|
||||
public static IEnumerable<string> GetAllIconNames() => _pathsByName.Keys;
|
||||
|
||||
/// <summary>
|
||||
/// 전체 아이콘 수를 반환합니다.
|
||||
/// </summary>
|
||||
public static int Count => 41;
|
||||
|
||||
/// <summary>
|
||||
/// 리소스 경로로 Sprite를 동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="resourcePath">리소스 경로 (예: Icons/Home)</param>
|
||||
public static Sprite? LoadSprite(string resourcePath)
|
||||
{
|
||||
if (_spriteCache.TryGetValue(resourcePath, out var cached))
|
||||
return cached;
|
||||
|
||||
var sprite = Resources.Load<Sprite>(resourcePath);
|
||||
_spriteCache[resourcePath] = sprite;
|
||||
return sprite;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 리소스 경로로 Sprite를 비동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="resourcePath">리소스 경로 (예: Icons/Home)</param>
|
||||
/// <param name="ct">취소 토큰</param>
|
||||
public static async UniTask<Sprite?> LoadSpriteAsync(string resourcePath, CancellationToken ct = default)
|
||||
{
|
||||
if (_spriteCache.TryGetValue(resourcePath, out var cached))
|
||||
return cached;
|
||||
|
||||
var request = Resources.LoadAsync<Sprite>(resourcePath);
|
||||
await request.ToUniTask(cancellationToken: ct);
|
||||
|
||||
var sprite = request.asset as Sprite;
|
||||
_spriteCache[resourcePath] = sprite;
|
||||
return sprite;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 리소스 경로로 Texture2D를 동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="resourcePath">리소스 경로 (예: Icons/Home)</param>
|
||||
public static Texture2D? LoadTexture(string resourcePath)
|
||||
{
|
||||
if (_textureCache.TryGetValue(resourcePath, out var cached))
|
||||
return cached;
|
||||
|
||||
var texture = Resources.Load<Texture2D>(resourcePath);
|
||||
_textureCache[resourcePath] = texture;
|
||||
return texture;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 리소스 경로로 Texture2D를 비동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="resourcePath">리소스 경로 (예: Icons/Home)</param>
|
||||
/// <param name="ct">취소 토큰</param>
|
||||
public static async UniTask<Texture2D?> LoadTextureAsync(string resourcePath, CancellationToken ct = default)
|
||||
{
|
||||
if (_textureCache.TryGetValue(resourcePath, out var cached))
|
||||
return cached;
|
||||
|
||||
var request = Resources.LoadAsync<Texture2D>(resourcePath);
|
||||
await request.ToUniTask(cancellationToken: ct);
|
||||
|
||||
var texture = request.asset as Texture2D;
|
||||
_textureCache[resourcePath] = texture;
|
||||
return texture;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 아이콘 이름으로 Sprite를 동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="iconName">아이콘 파일명 (확장자 제외)</param>
|
||||
public static Sprite? LoadSpriteByName(string iconName)
|
||||
{
|
||||
var path = GetPath(iconName);
|
||||
return string.IsNullOrEmpty(path) ? null : LoadSprite(path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 아이콘 이름으로 Sprite를 비동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="iconName">아이콘 파일명 (확장자 제외)</param>
|
||||
/// <param name="ct">취소 토큰</param>
|
||||
public static async UniTask<Sprite?> LoadSpriteByNameAsync(string iconName, CancellationToken ct = default)
|
||||
{
|
||||
var path = GetPath(iconName);
|
||||
return string.IsNullOrEmpty(path) ? null : await LoadSpriteAsync(path, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 아이콘 이름으로 Texture2D를 동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="iconName">아이콘 파일명 (확장자 제외)</param>
|
||||
public static Texture2D? LoadTextureByName(string iconName)
|
||||
{
|
||||
var path = GetPath(iconName);
|
||||
return string.IsNullOrEmpty(path) ? null : LoadTexture(path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 아이콘 이름으로 Texture2D를 비동기로 로드합니다. (캐싱됨)
|
||||
/// </summary>
|
||||
/// <param name="iconName">아이콘 파일명 (확장자 제외)</param>
|
||||
/// <param name="ct">취소 토큰</param>
|
||||
public static async UniTask<Texture2D?> LoadTextureByNameAsync(string iconName, CancellationToken ct = default)
|
||||
{
|
||||
var path = GetPath(iconName);
|
||||
return string.IsNullOrEmpty(path) ? null : await LoadTextureAsync(path, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 캐시를 클리어합니다.
|
||||
/// </summary>
|
||||
public static void ClearCache()
|
||||
{
|
||||
_spriteCache.Clear();
|
||||
_textureCache.Clear();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
12524
Assets/Scripts/UVC/UIToolkit/Common/UTKMaterialIcons.cs
Normal file
12524
Assets/Scripts/UVC/UIToolkit/Common/UTKMaterialIcons.cs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,37 @@ namespace UVC.UIToolkit
|
||||
/// 스크롤 뷰 컴포넌트.
|
||||
/// Unity ScrollView를 래핑하여 커스텀 스타일을 적용합니다.
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// <para><b>C# 코드에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// // 기본 스크롤 뷰
|
||||
/// var scrollView = new UTKScrollView();
|
||||
/// scrollView.Add(new Label("내용 1"));
|
||||
/// scrollView.Add(new Label("내용 2"));
|
||||
/// scrollView.Add(new Label("내용 3"));
|
||||
///
|
||||
/// // 스크롤 모드 설정
|
||||
/// var verticalScroll = new UTKScrollView(ScrollViewMode.Vertical);
|
||||
/// var horizontalScroll = new UTKScrollView(ScrollViewMode.Horizontal);
|
||||
/// </code>
|
||||
/// <para><b>UXML에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
|
||||
/// <!-- 기본 스크롤 뷰 -->
|
||||
/// <utk:UTKScrollView style="height: 200px;">
|
||||
/// <ui:Label text="항목 1" />
|
||||
/// <ui:Label text="항목 2" />
|
||||
/// <ui:Label text="항목 3" />
|
||||
/// </utk:UTKScrollView>
|
||||
///
|
||||
/// <!-- 수직 스크롤만 -->
|
||||
/// <utk:UTKScrollView mode="Vertical" />
|
||||
///
|
||||
/// <!-- 수평 스크롤만 -->
|
||||
/// <utk:UTKScrollView mode="Horizontal" />
|
||||
/// </ui:UXML>
|
||||
/// </code>
|
||||
/// </example>
|
||||
[UxmlElement]
|
||||
public partial class UTKScrollView : ScrollView, IDisposable
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user