83 lines
2.3 KiB
C#
83 lines
2.3 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class MemoryProgressUI : MonoBehaviour
|
|
{
|
|
[Header("Text")]
|
|
[SerializeField] private TMP_Text titleText;
|
|
[SerializeField] private TMP_Text countText;
|
|
|
|
[Header("Piece Icons")]
|
|
[Tooltip("획득한 조각 아이콘입니다. PieceSlot_01~05 안의 FilledIcon을 순서대로 넣으세요.")]
|
|
[SerializeField] private GameObject[] filledIcons;
|
|
|
|
[Tooltip("완성 또는 획득 연출용 Glow입니다. 없어도 됩니다.")]
|
|
[SerializeField] private GameObject[] glowIcons;
|
|
|
|
[Header("Optional Objects")]
|
|
[Tooltip("5개를 모두 모았을 때 켤 전체 완성 이펙트입니다. 없어도 됩니다.")]
|
|
[SerializeField] private GameObject completedEffect;
|
|
|
|
[Header("Settings")]
|
|
[SerializeField] private int maxPieces = 5;
|
|
[SerializeField] private string title = "기억의 조각";
|
|
[SerializeField] private bool showGlowOnlyWhenCompleted = true;
|
|
|
|
private void Awake()
|
|
{
|
|
if (titleText != null)
|
|
titleText.text = title;
|
|
|
|
SetProgress(0, maxPieces);
|
|
}
|
|
|
|
public void SetProgress(int current, int max)
|
|
{
|
|
maxPieces = Mathf.Max(1, max);
|
|
current = Mathf.Clamp(current, 0, maxPieces);
|
|
|
|
if (titleText != null)
|
|
titleText.text = title;
|
|
|
|
if (countText != null)
|
|
countText.text = $"{current} / {maxPieces}";
|
|
|
|
UpdatePieceIcons(current);
|
|
UpdateCompletedEffect(current >= maxPieces);
|
|
}
|
|
|
|
private void UpdatePieceIcons(int current)
|
|
{
|
|
if (filledIcons != null)
|
|
{
|
|
for (int i = 0; i < filledIcons.Length; i++)
|
|
{
|
|
if (filledIcons[i] != null)
|
|
filledIcons[i].SetActive(i < current);
|
|
}
|
|
}
|
|
|
|
if (glowIcons == null)
|
|
return;
|
|
|
|
bool completed = current >= maxPieces;
|
|
|
|
for (int i = 0; i < glowIcons.Length; i++)
|
|
{
|
|
if (glowIcons[i] == null)
|
|
continue;
|
|
|
|
if (showGlowOnlyWhenCompleted)
|
|
glowIcons[i].SetActive(completed);
|
|
else
|
|
glowIcons[i].SetActive(i < current);
|
|
}
|
|
}
|
|
|
|
private void UpdateCompletedEffect(bool completed)
|
|
{
|
|
if (completedEffect != null)
|
|
completedEffect.SetActive(completed);
|
|
}
|
|
}
|