您的位置:首页 > 产品设计 > UI/UE

UI框架学习笔记

2017-08-22 17:15 351 查看
本文是根据学习SiKi学院上的UI框架总结得来的,仅仅是作为学习过程的记录,便于以后回顾。首先看下UI框架总体的设计思路:



一.UIPanelType:枚举类型,为了存储UI界面有哪几种类型。

二.UIPanelType.json:json文件,为了保存UI界面的Prefab存储路径。

三.UIManager:

(1)解析json并存储在Dictionary中,用于实例化UI界面;

(2)保存所有实例化的面板,避免重复加载UI界面;

(3)用Stack保存所有显示的页面,避免跨界面操作;

四.界面都有四种状态:显示,暂停,恢复,关闭。因此可以设计为对应四种状态函数,分别为:OnEnter(),OnPause(),OnResume(),OnExit(),四种状态函数关系如上。且将它们写在BasePanel中,每个UI界面再分别继承与BasePanel类,这样便于维护。

(1)OnEnter():UI界面被显示的时候调用,因此可以在此处插入声音、动画等;

(2)OnPause():UI界面跳转到新界面时被被调用;

(3)OnResume():UI界面从新界面跳转回来被调用;

(4)OnExit():当前UI界面被关闭时调用;

五.进行UI框架设计时,遇到的问题:

(1)JsonUtility无法解析数组类型

解决方案:JsonUtility仅仅只支持对象解析,而不支持数组与List解析。如果要解析List或数组,需要将该json文件List或数组属性转换成对象对象。

(2)扩展方法的使用

扩展方法无法访问被扩展类的私有数据,增加的被扩展类的安全性。

特点:

1.静态类

2.静态方法

3.第一个参数为扩展类型,需要将其用this修饰,表示被扩展类型

eg:
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}

string s = "Hello Extension Methods";
int i = s.WordCount();


(3)GetComponent方法:获取组件会优先子类对象,而不是父类对象

Class ATest{

}

Class BTest:ATest{

}

Class C: MonoBehaviour {

private ATest aTest;

void Start () {
aTest = this.GetComponent<ATest>();
Debug.Log(aTest.GetType());//输出为BTest
}
}


(4)CanvasGroup组件的使用

alpha属性:UI是否可以显示

blocksRaycasts属性:控制UI上的按钮事件是否可以触发

六.源码链接

链接: https://pan.baidu.com/s/1slCxTBR 密码: bft9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d ui框架