기본 Styleguide 완료
This commit is contained in:
@@ -8,39 +8,99 @@ namespace UVC.UIToolkit
|
||||
/// <summary>
|
||||
/// 프로그레스 바 컴포넌트.
|
||||
/// Unity ProgressBar를 래핑하여 커스텀 스타일을 적용합니다.
|
||||
/// 작업의 진행 상황을 시각적으로 표시합니다.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <para><b>ProgressBar(진행률 표시줄)란?</b></para>
|
||||
/// <para>
|
||||
/// ProgressBar는 작업의 완료 정도를 시각적으로 표시하는 UI 컨트롤입니다.
|
||||
/// 파일 다운로드, 로딩, 설치 진행률 등 사용자에게 대기 시간과 완료 상태를 알려줍니다.
|
||||
/// </para>
|
||||
///
|
||||
/// <para><b>주요 속성:</b></para>
|
||||
/// <list type="bullet">
|
||||
/// <item><description><c>Value</c> - 현재 진행 값</description></item>
|
||||
/// <item><description><c>MinValue</c> - 최소값 (보통 0)</description></item>
|
||||
/// <item><description><c>MaxValue</c> - 최대값 (보통 100)</description></item>
|
||||
/// <item><description><c>ShowValue</c> - 값 텍스트 표시 여부</description></item>
|
||||
/// <item><description><c>ShowPercentage</c> - 퍼센트로 표시 (true) 또는 값/최대값으로 표시 (false)</description></item>
|
||||
/// <item><description><c>IsIndeterminate</c> - 불확정 상태 (진행률을 알 수 없을 때 애니메이션)</description></item>
|
||||
/// <item><description><c>Variant</c> - 스타일 변형 (Default, Success, Warning, Error)</description></item>
|
||||
/// </list>
|
||||
///
|
||||
/// <para><b>Variant 스타일:</b></para>
|
||||
/// <list type="bullet">
|
||||
/// <item><description><c>Default</c> - 기본 파란색 (일반 진행)</description></item>
|
||||
/// <item><description><c>Success</c> - 녹색 (완료, 성공)</description></item>
|
||||
/// <item><description><c>Warning</c> - 주황색 (주의 필요)</description></item>
|
||||
/// <item><description><c>Error</c> - 빨간색 (오류, 실패)</description></item>
|
||||
/// </list>
|
||||
///
|
||||
/// <para><b>불확정 상태(Indeterminate):</b></para>
|
||||
/// <para>
|
||||
/// 작업 완료 시점을 알 수 없을 때 사용합니다 (예: 서버 응답 대기).
|
||||
/// 바가 좌우로 움직이는 애니메이션으로 "작업 중"임을 표시합니다.
|
||||
/// </para>
|
||||
///
|
||||
/// <para><b>실제 활용 예시:</b></para>
|
||||
/// <list type="bullet">
|
||||
/// <item><description>파일 다운로드/업로드 진행률</description></item>
|
||||
/// <item><description>게임 로딩 화면</description></item>
|
||||
/// <item><description>설치/업데이트 진행 상태</description></item>
|
||||
/// <item><description>데이터 처리 진행률</description></item>
|
||||
/// <item><description>퀘스트/미션 달성도</description></item>
|
||||
/// </list>
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// <para><b>C# 코드에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// // 기본 프로그레스 바
|
||||
/// var progressBar = new UTKProgressBar();
|
||||
/// progressBar.title = "다운로드 중...";
|
||||
/// progressBar.MinValue = 0;
|
||||
/// progressBar.MaxValue = 100;
|
||||
/// progressBar.Value = 50;
|
||||
///
|
||||
/// // 값 표시 설정
|
||||
/// progressBar.ShowValue = true;
|
||||
/// progressBar.ShowPercentage = true;
|
||||
///
|
||||
/// // 무한 로딩 (불확정 상태)
|
||||
/// progressBar.IsIndeterminate = true;
|
||||
///
|
||||
/// // 변형 스타일
|
||||
/// progressBar.Variant = UTKProgressBar.ProgressBarVariant.Success;
|
||||
/// // 다운로드 진행률 표시
|
||||
/// var downloadProgress = new UTKProgressBar("다운로드 중...", 0, 100);
|
||||
/// downloadProgress.ShowPercentage = true;
|
||||
///
|
||||
/// // 비동기 다운로드 시뮬레이션
|
||||
/// async UniTask DownloadFile()
|
||||
/// {
|
||||
/// for (int i = 0; i <= 100; i++)
|
||||
/// {
|
||||
/// downloadProgress.Value = i;
|
||||
/// await UniTask.Delay(50);
|
||||
/// }
|
||||
/// downloadProgress.Variant = UTKProgressBar.ProgressBarVariant.Success;
|
||||
/// }
|
||||
///
|
||||
/// // 불확정 상태 (서버 응답 대기)
|
||||
/// var loadingBar = new UTKProgressBar();
|
||||
/// loadingBar.IsIndeterminate = true; // 무한 애니메이션
|
||||
///
|
||||
/// // 상태별 색상 변경
|
||||
/// progressBar.Variant = UTKProgressBar.ProgressBarVariant.Warning; // 주의
|
||||
/// progressBar.Variant = UTKProgressBar.ProgressBarVariant.Error; // 실패
|
||||
///
|
||||
/// // 값/최대값 형식 (예: 50/100)
|
||||
/// var itemProgress = new UTKProgressBar("수집한 아이템", 0, 100);
|
||||
/// itemProgress.ShowPercentage = false; // "50/100" 형식으로 표시
|
||||
/// itemProgress.Value = 50;
|
||||
/// </code>
|
||||
/// <para><b>UXML에서 사용:</b></para>
|
||||
/// <code>
|
||||
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
|
||||
/// <!-- 기본 프로그레스 바 -->
|
||||
/// <utk:UTKProgressBar title="진행률" low-value="0" high-value="100" value="30" />
|
||||
///
|
||||
/// <!-- 퍼센트 표시 -->
|
||||
/// <utk:UTKProgressBar ShowPercentage="true" value="75" />
|
||||
///
|
||||
/// <!-- 성공 스타일 -->
|
||||
/// <utk:UTKProgressBar Variant="Success" value="100" />
|
||||
/// </ui:UXML>
|
||||
/// <!-- 기본 프로그레스 바 -->
|
||||
/// <utk:UTKProgressBar title="진행률" low-value="0" high-value="100" value="30" />
|
||||
///
|
||||
/// <!-- 퍼센트 표시 -->
|
||||
/// <utk:UTKProgressBar show-percentage="true" value="75" />
|
||||
///
|
||||
/// <!-- 값/최대값 표시 -->
|
||||
/// <utk:UTKProgressBar show-percentage="false" show-value="true" value="50" />
|
||||
///
|
||||
/// <!-- 성공 스타일 -->
|
||||
/// <utk:UTKProgressBar variant="Success" value="100" />
|
||||
///
|
||||
/// <!-- 경고 스타일 -->
|
||||
/// <utk:UTKProgressBar variant="Warning" value="80" />
|
||||
///
|
||||
/// <!-- 불확정 상태 (로딩 애니메이션) -->
|
||||
/// <utk:UTKProgressBar is-indeterminate="true" />
|
||||
/// </code>
|
||||
/// </example>
|
||||
[UxmlElement]
|
||||
@@ -56,6 +116,7 @@ namespace UVC.UIToolkit
|
||||
private bool _showPercentage = true;
|
||||
private bool _isIndeterminate;
|
||||
private ProgressBarVariant _variant = ProgressBarVariant.Default;
|
||||
private string _baseTitle = "";
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
@@ -161,6 +222,15 @@ namespace UVC.UIToolkit
|
||||
|
||||
SetupStyles();
|
||||
SubscribeToThemeChanges();
|
||||
|
||||
// UXML에서 value가 설정된 후 title 갱신
|
||||
RegisterCallback<AttachToPanelEvent>(OnAttachToPanel);
|
||||
}
|
||||
|
||||
private void OnAttachToPanel(AttachToPanelEvent evt)
|
||||
{
|
||||
UnregisterCallback<AttachToPanelEvent>(OnAttachToPanel);
|
||||
UpdateValueLabel();
|
||||
}
|
||||
|
||||
public UTKProgressBar(string text, float value = 0f, float maxValue = 100f) : this()
|
||||
@@ -208,21 +278,19 @@ namespace UVC.UIToolkit
|
||||
{
|
||||
if (_isIndeterminate || !_showValue)
|
||||
{
|
||||
title = title?.Split(' ')[0] ?? "";
|
||||
title = _baseTitle;
|
||||
return;
|
||||
}
|
||||
|
||||
string baseTitle = title?.Split(' ')[0] ?? "";
|
||||
|
||||
if (_showPercentage)
|
||||
{
|
||||
float range = highValue - lowValue;
|
||||
float percent = range > 0 ? (value - lowValue) / range * 100 : 0;
|
||||
title = string.IsNullOrEmpty(baseTitle) ? $"{percent:F0}%" : $"{baseTitle} {percent:F0}%";
|
||||
title = $"{percent:F0}%";
|
||||
}
|
||||
else
|
||||
{
|
||||
title = string.IsNullOrEmpty(baseTitle) ? $"{value:F0}/{highValue:F0}" : $"{baseTitle} {value:F0}/{highValue:F0}";
|
||||
title = $"{value:F0}/{highValue:F0}";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user