这次是准备用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>
/// 命令类型