using UnityEngine; using UnityEngine.UI; public class uLevel : MonoBehaviour { public Text uLevelText; public Slider uLevelSlider; public Text uLProgress; public Text uL_curr; public Text uL_post; public Button view_levelDetail; public Button close_levelDetail; [Header("uLevelPanel")] public GameObject uLevelPanel; public uLevel_skills uls; [Header("so")] public Player_SO pso; private GameObject resolvedLevelPanelRoot; private void Start() { if (pso == null) pso = Resources.Load("playerdata/playerData_uniqueData"); resolvedLevelPanelRoot = ResolveLevelPanelRoot(); if (resolvedLevelPanelRoot != null) resolvedLevelPanelRoot.SetActive(false); if (uls != null && pso != null) uls.SetPlayerSo(pso); if (view_levelDetail != null) { view_levelDetail.onClick.RemoveListener(OpenLevelDetailPanel); view_levelDetail.onClick.AddListener(OpenLevelDetailPanel); } if (close_levelDetail != null) { close_levelDetail.onClick.RemoveListener(CloseLevelDetailPanel); close_levelDetail.onClick.AddListener(CloseLevelDetailPanel); } } private void OpenLevelDetailPanel() { GameObject panelRoot = ResolveLevelPanelRoot(); if (panelRoot == null) return; if (uls != null && pso != null) uls.SetPlayerSo(pso); panelRoot.SetActive(true); } private void CloseLevelDetailPanel() { GameObject panelRoot = ResolveLevelPanelRoot(); if (panelRoot != null) panelRoot.SetActive(false); } private GameObject ResolveLevelPanelRoot() { if (uLevelPanel == null) return null; Transform current = uLevelPanel.transform; GameObject highestInactiveAncestor = null; while (current != null) { if (!current.gameObject.activeSelf) { highestInactiveAncestor = current.gameObject; } current = current.parent; } resolvedLevelPanelRoot = highestInactiveAncestor != null ? highestInactiveAncestor : uLevelPanel; return resolvedLevelPanelRoot; } }