using System.Collections; using System.Collections.Generic; using UnityEngine; public class LevelUpUIManager : MonoBehaviour { [SerializeField] private GameObject panel; [SerializeField] private CardUI[] cardPrefabs; [SerializeField] private Transform cardParent; [SerializeField] private List cardPool; private void OnEnable() { PlayerLevelSystem.OnLevelUp += Show; } private void OnDisable() { PlayerLevelSystem.OnLevelUp -= Show; } void Show() { panel.SetActive(true); Time.timeScale = 0f; foreach (Transform child in cardParent) Destroy(child.gameObject); int slotCount = 2; // =============================== // 🔒 방어 코드 // =============================== if (cardPool.Count == 0) { Debug.LogWarning("cardPool이 비어 있습니다."); return; } if (cardPrefabs.Length < slotCount) { Debug.LogError("cardPrefabs 개수가 slotCount보다 적습니다."); return; } // =============================== // 카드 데이터 선택 // =============================== List selectedCards = new List(); if (cardPool.Count >= slotCount) { List tempCardPool = new List(cardPool); for (int i = 0; i < slotCount; i++) { int index = Random.Range(0, tempCardPool.Count); selectedCards.Add(tempCardPool[index]); tempCardPool.RemoveAt(index); } } else { // ⭐ 카드 부족하면 순환 for (int i = 0; i < slotCount; i++) { selectedCards.Add(cardPool[i % cardPool.Count]); } } // =============================== // ⭐ 카드 프리팹 중복 제거 // =============================== List tempPrefabs = new List(cardPrefabs); for (int i = 0; i < slotCount; i++) { int prefabIndex = Random.Range(0, tempPrefabs.Count); CardUI prefab = tempPrefabs[prefabIndex]; tempPrefabs.RemoveAt(prefabIndex); CardUI ui = Instantiate(prefab, cardParent); ui.Setup(selectedCards[i], this); } } public void Close() { Time.timeScale = 1f; panel.SetActive(false); } }