unity界面和代码分离解决方案

本文介绍了Unity中界面与代码分离的设计方法,包括面板(Panel)和提示(Tip)两种界面类型,以及如何通过PanelBase基类和PanelMgr管理类进行控制。通过使用反射类名存储界面,并利用泛型进行界面的打开和关闭操作,实现了灵活的UI管理。此外,文中还展示了一个登录面板的子类实例,说明了如何初始化和传递参数。
摘要由CSDN通过智能技术生成

新手或者小规模的游戏喜欢使用SetActive或者Instantiate prefab来切换界面,这样可以,但是不灵活,也不规范,碰到大量代码的时候就会力不从心。


所谓界面与代码分离也就是将界面用代码封装起来,再通过一个管理器来控制,方便其他程序的调用和控制


介绍一下大体设计方法,让大家有一个宏观的观念


界面一共分为两种
    1.Panel 面板
        比如登陆面板,注册面板,进入游戏的主菜单面板,画面设置面板等等,即拥有一定相关功能的界面模块
    2.Tip 提示
        比如错误提示,胜利提示,失败提示,好友消息等等,即主要功能只是反馈数据信息的小界面


所有界面类都将继承PanelBase基类,通过修改每个子类的Layer枚举类型字段来设置是Panel还是Tip(PanelBase可能有歧义,但是他是所有UI的Base)


所有的UI类都继承MonoBehaviour,脚本统一挂到Canvas画布上,用PanelMgr管理类通过一个字典<string,PanelBase>来控制,界面的UI也就是具体的GameObject则是脚本内的一个GameObject字段,具体的其他按钮什么的通过该字段的Transform缓存后在实例时查找赋值
这两种Panel和Tip界面分别属于Canvas/Panel和Canvas/Tip两个GameObject的子物体,用PanelMgr管理类通过一个字典<PanelLayer,Transform>来控制
生命周期可以用子类的重写


好,下面上代码,让我们看一下详细的设计方法

public enum PanelLayer
{
    Panel,        //面板
    Tip,         //提示
}


UI基类

 

public class PanelBase : MonoBehaviour {


    //皮肤路径
    public string skinPath;
    //皮肤
    public GameObject skin;
    //层级
    public PanelLayer layer;
    //面板参数
    public object[] args;


    #region 生命周期
    public virtual void Init(params object[] args)   //自定义参数
    {
        this.args = args;
    }


    //开始面板前
    public virtual void OnShowing() { }


    //显示面板后
    public virtual void OnShowed() { }


    //帧更新
    public virtual void Update() { }


    //关闭前
    public virtual void OnClosing() { }


    //关闭后
    public virtual void OnClosed() { }
    #endregion


    #region 操作
    protected virtual void Close()
    {
        string name = this.GetType().ToString();   //反射
        PanelMgr.Instance.ClosePanel(name);
    }
    #endregion
}



关于子类如何重写来使用,这里先留一个悬念,最后我们在举一个例子看看怎么用


管理类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值