unity簡易ui框架


在unity項目開發中,ui模塊的開發往往占據了很大一部分工作,部分游戲甚至絕大部分的工作都是在ui上,如何高效管理各種界面,這里分享一套高效易用的UI框架。
首先,我們定義一個PanelBase類,作為所有panel的父類,在這個類里,我們可以給panel定義一套生命周期

 

    //初始化

 

    public virtual void Init(){}
    //開始面板前
    public virtual void OnShowing() { }
    //顯示面板后
    public virtual void OnShowed() { }
    //幀更新
    public virtual void Update() { }
    //關閉前
    public virtual void OnClosing() { }
    //關閉后
    public virtual void OnClosed() { }

 

 

所有界面類需要繼承PanelBase類,並重寫這套生命周期函數,當然你不必每個界面都重寫這生命周期中所有的函數,具體情況還得具體分析。這里以一個界面LoginPanel為例:

 

public class LoginPanel : PanelBase
{
    #region 生命周期
    //初始化
    public override void Init(s)
    {

      //dosomething 

    }
    public override void OnShowing()
    {
        base.OnShowing();
        loginBtn.onClick.AddListener(OnLoginClick);
        regBtn.onClick.AddListener(OnRegClick);
    }
    #endregion

 

 

首先,在Init函數中初始化一些屬性參數,OnShowing函數為界面打開時執行的函數,在LoginPanel中也會寫一些本界面的邏輯處理。
最后,需要定義一個PanelManager類,用來負責提供打開和關閉某界面的功能,當需要打開或者關閉某個界面時,調用該類中的open、close函數即可,這樣做的好處自然不必多說:

 

 public void OpenPanel<T>(string skinPath, params object[] args) where T : PanelBase
    {
        //已經打開
        string name = typeof(T).ToString();
        if (dict.ContainsKey(name))
            return;
        //面板腳本
        PanelBase panel = canvas.AddComponent<T>();
        panel.Init(args);
        dict.Add(name, panel);
        panel.OnShowing();
        panel.OnShowed();
    }
    //關閉面板
    public void ClosePanel(string name)
    {
        PanelBase panel = (PanelBase)dict[name];
        if (panel == null)
            return;
        panel.OnClosing();
        dict.Remove(name);
        panel.OnClosed();
        GameObject.Destroy(panel.skin);
        Component.Destroy(panel);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM