| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- using System.Collections.Generic;
- using System.Collections;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.SceneManagement;
- public class AchievementUI : MonoBehaviour
- {
- [Header("UI元素")]
- public Transform achievementContainer;
- public GameObject achievementItemPrefab;
- public Text progressText;
- public Button backButton;
-
- [Header("场景名称")]
- public string menuSceneName = "MenuScene";
-
- private List<GameObject> achievementItems = new List<GameObject>();
-
- private void Start()
- {
- if (achievementContainer == null)
- {
- achievementContainer = transform.Find("Content");
- if (achievementContainer == null)
- {
- achievementContainer = transform.Find("ScrollView/Viewport/Content");
- }
- }
-
- if (backButton != null)
- {
- backButton.onClick.AddListener(OnBackClicked);
- }
-
- StartCoroutine(LoadAchievementsWhenReady());
- }
- IEnumerator LoadAchievementsWhenReady()
- {
- if (AchievementManager.Instance == null)
- {
- Debug.LogWarning("AchievementManager未找到!");
- yield break;
- }
- float timeout = 5f;
- while (!AchievementManager.Instance.IsInitialized && timeout > 0f)
- {
- timeout -= Time.unscaledDeltaTime;
- yield return null;
- }
- if (!AchievementManager.Instance.IsInitialized)
- {
- Debug.LogWarning("成就数据加载超时,将显示当前缓存数据");
- }
- LoadAchievements();
- }
-
- void LoadAchievements()
- {
- if (AchievementManager.Instance == null)
- {
- Debug.LogWarning("AchievementManager未找到!");
- return;
- }
-
- foreach (var item in achievementItems)
- {
- if (item != null)
- {
- Destroy(item);
- }
- }
- achievementItems.Clear();
-
- List<AchievementData> achievements = AchievementManager.Instance.GetAllAchievements();
-
- int unlockedCount = 0;
-
- foreach (var achievement in achievements)
- {
- if (achievement.isUnlocked)
- {
- unlockedCount++;
- }
-
- CreateAchievementItem(achievement);
- }
-
- if (progressText != null)
- {
- progressText.text = $"已解锁: {unlockedCount}/{achievements.Count}";
- }
- }
-
- void CreateAchievementItem(AchievementData achievement)
- {
- if (achievementContainer == null || achievementItemPrefab == null)
- {
- Debug.LogWarning("成就容器或预制体未设置!");
- return;
- }
-
- GameObject itemObj = Instantiate(achievementItemPrefab, achievementContainer);
- achievementItems.Add(itemObj);
-
- Transform iconTransform = itemObj.transform.Find("IconImage");
- Transform bgTransform = itemObj.transform.Find("BackgroundImage");
-
- Image iconImage = iconTransform != null ? iconTransform.GetComponent<Image>() : null;
- Image bgImage = bgTransform != null ? bgTransform.GetComponent<Image>() : null;
-
- if (iconImage != null && achievement.icon != null)
- {
- iconImage.sprite = achievement.icon;
- }
-
- Text[] texts = itemObj.GetComponentsInChildren<Text>();
- if (texts.Length >= 3)
- {
- texts[0].text = achievement.achievementName;
- texts[1].text = achievement.description;
- texts[2].text = $"进度: {achievement.currentValue}/{achievement.targetValue}";
- }
-
- if (achievement.isUnlocked)
- {
- if (texts.Length >= 3)
- {
- texts[2].text = "已解锁 ✓";
- texts[2].color = Color.green;
- }
-
- if (bgImage != null)
- {
- bgImage.color = new Color(1f, 0.9f, 0.5f);
- }
- }
- else
- {
- if (bgImage != null)
- {
- bgImage.color = new Color(0.5f, 0.5f, 0.5f);
- }
- }
- }
-
- void OnBackClicked()
- {
- Debug.Log("返回菜单");
- SceneManager.LoadScene(menuSceneName);
- }
- }
|