using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // ⭐ 버튼 제어를 위해 필수! public class LevelUpUIManager : MonoBehaviour { [SerializeField] private GameObject panel; [SerializeField] private CardUI[] cardPrefabs; [SerializeField] private Transform cardParent; [SerializeField] private List cardPool; [Header("--- 확정 버튼 설정 ---")] // ⭐ 이 변수가 있어야 인스펙터에 Apply Button 칸이 보입니다! [SerializeField] private Button applyButton; private CardUI _selectedCardUI; // 현재 클릭된 카드 저장용 private void OnEnable() { PlayerLevelSystem.OnLevelUp += Show; // ⭐ 버튼 클릭 시 OnApplyButtonClick 실행하도록 연결 if (applyButton != null) applyButton.onClick.AddListener(OnApplyButtonClick); } private void OnDisable() { PlayerLevelSystem.OnLevelUp -= Show; if (applyButton != null) applyButton.onClick.RemoveListener(OnApplyButtonClick); } void Show() { panel.SetActive(true); Time.timeScale = 0f; _selectedCardUI = null; if (applyButton != null) applyButton.interactable = false; // 시작 땐 버튼 비활성 foreach (Transform child in cardParent) Destroy(child.gameObject); int slotCount = 2; // ⭐ [에러 해결] selectedCards를 여기서 확실히 선언합니다! List selectedCards = new List(); if (cardPool.Count >= slotCount) { List tempPool = new List(cardPool); for (int i = 0; i < slotCount; i++) { int idx = Random.Range(0, tempPool.Count); selectedCards.Add(tempPool[idx]); tempPool.RemoveAt(idx); } } else // 카드 부족 시 순환 { for (int i = 0; i < slotCount; i++) selectedCards.Add(cardPool[i % cardPool.Count]); } // 카드 생성 및 셋업 for (int i = 0; i < slotCount; i++) { // 프리팹 랜덤 선택 후 생성 CardUI ui = Instantiate(cardPrefabs[Random.Range(0, cardPrefabs.Length)], cardParent); ui.Setup(selectedCards[i], this); // ⭐ 이제 selectedCards 에러가 뜨지 않습니다! } } // 카드를 클릭했을 때 호출 (선택 상태 표시) public void OnCardClick(CardUI clickedUI) { if (_selectedCardUI != null) _selectedCardUI.SetSelected(false); _selectedCardUI = clickedUI; _selectedCardUI.SetSelected(true); if (applyButton != null) applyButton.interactable = true; // ⭐ 드디어 버튼 활성화! } // APPLY 버튼을 눌렀을 때만 최종 적용! private void OnApplyButtonClick() { if (_selectedCardUI == null) return; _selectedCardUI.ApplyCurrentEffect(); Close(); } public void Close() { Time.timeScale = 1f; panel.SetActive(false); } }