• 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);
        }
  • 相关阅读:
    欢迎加入本人建的QQ群,讨论技术,生活及每天都有招聘信息
    ThreadPool(线程池) in .Net
    Android和Unity混合开发——解决方案
    HoloLens的显示分辨率有多少?
    ARGB_8888
    这几天用高通VUFORIA的体会
    利用WMI检测电脑硬件信息,没办法显示cpu的信息
    高版本teamview的成为被控制端时,会一直出现“正在初始化显示参数”
    Windows Server 2012 R2搭建IIS服务器
    如何设置Win7不待机 Win7进入待机状态会断网的解决方法
  • 原文地址:https://www.cnblogs.com/IAMTOM/p/9354588.html
Copyright © 2020-2023  润新知