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 achievementItems = new List(); 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 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() : null; Image bgImage = bgTransform != null ? bgTransform.GetComponent() : null; if (iconImage != null && achievement.icon != null) { iconImage.sprite = achievement.icon; } Text[] texts = itemObj.GetComponentsInChildren(); 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); } }