游戏框架之UI管理(二)

这篇博客探讨了在5.1版本后由于与Vuforia的冲突从NGUI转向UGUI的情况。作者分享了使用UGUI构建UI框架的思路,通过BaseUI基类来管理所有UI特性,采用面向对象设计。还提到了CacheTransform的设计用于提升效率,并计划使用命令集模式管理UI,在Update中执行命令。虽然资源加载和事件管理的代码未展示,但文章提供了基本理解的框架思路。
摘要由CSDN通过智能技术生成

这次是准备用UGUI写个UI框架,之前用NGUI写过,事件处理是用的UIEvent。

但是NGUI在5.1之后和vuforia有了点冲突,没办法我只能换成UGUI。

这里就分享下吧。


我的思路大体是这样,用一个BaseUI管理UI的所有特性,作为基类。

这里是面向对象的一个设计思路。

稍微提下,有些朋友问我为什么要写一个CacheTransform,不就是this吗。

这里我的本意是把这个Transform加入缓存,这样执行起来效率高点。



using UnityEngine;
using System.Collections;


public class BaseUI : MonoBehaviour 
{
    
    /// <summary>
    /// 当前界面名称
    /// </summary>
    [HideInInspector]
    public string UIName;


    private Transform mTransform;
    public Transform CacheTransform
    {
        get
        {
            if (mTransform == null) mTransform = this.transform;
            return mTransform;
        }
    }


    private GameObject mGo;
    public GameObject CacheGameObject
    {
        get
        {
            if (mGo == null) mGo = this.gameObject;
            return mGo;
        }
    }


    /// <summary>
    /// 显示当前UI
    /// </summary>
    /// <param name="param">附加参数</param>
    public void Show(object param)
    {
        CacheGameObject.SetActive(true);
        OnShow(param);
    }


    /// <summary>
    /// 隐藏当前界面
    /// </summary>
    public void Hide()
    {
        CacheGameObject.SetActive(false);
        OnHide();
    }


    [HideInInspector]
    public Canvas mainCanvas = null;


<span style="white-space:pre">	</span>/// <summary>
<span style="white-space:pre">	</span>/// 绑定脚本并且激活游戏物体会调用的方法
<span style="white-space:pre">	</span>/// </summary>
<span style="white-space:pre">	</span>void Awake() 
<span style="white-space:pre">	</span>{
        OnAwake();
<span style="white-space:pre">	</span>}


    /// <summary>
    /// 初始化UI主要用于寻找组件等
    /// </summary>
    public void UIInit()
    {
        OnInit();
    }


    /// <summary>
    /// 显示当前界面
    /// </summary>
    /// <param name="param">附加参数</param>
    protected virtual void OnShow(object param){ }


    /// <summary>
    /// 隐藏当前界面
    /// </summary>
    protected virtual void OnHide() { }


    /// <summary>
    /// 初始化当前界面
    /// </summary>
    protected virtual void OnInit() { }


    protected virtual void OnAwake() { }


    /// <summary>
    /// 删除当前UI 
    /// </summary>
    protected virtual void OnDestroy() { }
}

虚函数 是用来给继承类去继承的。



接下来写UIMgr,用来管理BaseUI.

说下思路,这里是想用命令集的形式去弄UI,在update里面每帧去调用一次命令集。

所以先写一个Command的命令集类

 /// <summary>
    /// 操作UI命令集
    /// </summary>
    public class Command
    {
        /// <summary>
        /// 命令类型
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值