Unity 간단 한 UI 프레임 워 크

5689 단어 UGUIUnity
/* 
        SIKI   UI  ,     json  ,      ,            ,         : 
    1、    json    2、           。             ,         UIPanelPath  , 
              Resources     UI     
 */  
using UnityEngine;  
using System.Collections;  
using System.Collections.Generic;  
  
///   
/// UI   ,                
///   
public class UIManager{  
  
    private static UIManager instance;  
    public static UIManager Instance  
    {  
        get  
        {  
            if (instance==null)  
            {  
                instance = new UIManager();  
            }  
            return instance;  
        }  
    }  
  
    private UIManager()  
    {  
        Init();  
    }  
  
    private Transform canvasTransform;  
    private Transform CanvasTransform  
    {  
        get  
        {  
            if (canvasTransform==null)  
            {  
                canvasTransform = GameObject.Find("Canvas").transform;  
            }  
            return canvasTransform;  
        }  
    }  
    private Dictionary panelDict;    //            
    private Stack panelStack;    //        
  
    ///   
    ///       
    ///   
    private BasePanel GetPanel(string panelPath)  
    {  
        BasePanel panel;  
        panelDict.TryGetValue(panelPath, out panel);  
        if (panel==null)  
        {  
            GameObject insObj = GameObject.Instantiate(Resources.Load(panelPath)) as GameObject;  
            insObj.transform.SetParent(CanvasTransform, false);  
            BasePanel basePanel = insObj.GetComponent();  
            panelDict.Add(panelPath, basePanel);  
            return basePanel;  
        }  
        else  
        {  
            return panel;  
        }  
    }  
  
    ///   
    ///             
    ///   
    private void Init()  
    {  
        if (panelDict == null)  
            panelDict = new Dictionary();  
        if (panelStack == null)  
            panelStack = new Stack();  
    }  
  
    ///   
    ///   ,      
    ///   
    ///          
    public void PushPanel(string panelPath)  
    {  
        if (panelStack.Count > 0)  
        {  
            BasePanel topPanel = panelStack.Peek();  
            topPanel.OnPause();  
        }  
        BasePanel panel = GetPanel(panelPath);  
        panel.OnEnter();  
        panelStack.Push(panel);  
    }  
  
    ///   
    ///   ,      
    ///   
    public void PopPanel()  
    {  
        if (panelStack.Count <= 0) return;  
        BasePanel topPanel = panelStack.Pop();  
        topPanel.OnExit();  
        if (panelStack.Count <= 0) return;  
        BasePanel nextPanel = panelStack.Peek();  
        nextPanel.OnResume();  
    }  
}  
using UnityEngine;  
using System.Collections;  
  
///   
/// Resources    UI     ,               
///   
public class UIPanelPath {  
  
    public const string MAINUIPANEL = "UIPanel/MainUIPanel";  
    public const string MISSIONCHANGEPANEL = "UIPanel/MissionChangePanel";  
}  
using UnityEngine;  
using System.Collections;  
  
///   
///     ,        ,           
///   
public class BasePanel : MonoBehaviour {  
  
    //        CanvasGroup  ,           
    protected CanvasGroup canvasGroup;   
  
    public virtual void Awake()  
    {  
        canvasGroup = GetComponent();  
    }  
  
    ///   
    ///       
    ///   
    public virtual void OnEnter()  
    {  
    }  
  
    ///   
    ///       
    ///   
    public virtual void OnPause()  
    {  
    }  
  
    ///   
    ///       
    ///   
    public virtual void OnResume()  
    {  
    }  
  
    ///   
    ///       
    ///   
    public virtual void OnExit()  
    {  
    }  
}  
using UnityEngine;  
using System.Collections;  
  
///   
///      
///   
public class FrameworkStart : MonoBehaviour {  
     
    void Start ()  
    {  
        UIManager.Instance.PushPanel(UIPanelPath.MAINUIPANEL);  
    }  
}  
using UnityEngine;  
using System.Collections;  
using UnityEngine.UI;  
  
public class MainUIPanel : BasePanel {  
  
    [SerializeField]  
    private Button missileButton;  
    [SerializeField]  
    private Button satelliteButton;  
    [SerializeField]  
    private Button spaceportButton;  
  
    private void Start()  
    {  
        missileButton.onClick.AddListener(OnClickMissileButton);  
        satelliteButton.onClick.AddListener(OnClickSatelliteButton);  
        spaceportButton.onClick.AddListener(OnClickSpaceportButton);  
    }  
  
    ///   
    ///         
    ///   
    private void OnClickMissileButton()  
    {  
        Debug.Log("  ");  
    }  
  
    ///   
    ///         
    ///   
    private void OnClickSatelliteButton()  
    {  
        Debug.Log("  ");  
    }  
  
    ///   
    ///          
    ///   
    private void OnClickSpaceportButton()  
    {  
        UIManager.Instance.PushPanel(UIPanelPath.MISSIONCHANGEPANEL);  
    }  
  
    public override void OnPause()  
    {  
        canvasGroup.alpha = 0;  
    }  
  
    public override void OnResume()  
    {  
        canvasGroup.alpha = 1;  
    }  
}  

좋은 웹페이지 즐겨찾기