Unity-Framework

Unity 框架

本文UI框架借鉴游客学院

本文章源码可在我的GitHub中找到

UI框架

UI框架简介

本框架用的UGUI,比较难做出3D效果的界面,3D特效界面还是用NGUI好一些。SceneLogin、SceneMain、SceneTest是演示的三个界面。

框架流程Scene

打开界面通过SceneMgr。SceneMgr会调用SceneBase中的OnInit。数据会传输到sceneDates不定长数组里。界面初始化会如下依次执行

  • InitDate():必须设置UI皮肤(UI的prefab),界面没有生成前的初始化数据。
  • InitSkin():会自动执行,创建UI实例。
  • InitViewDate():界面生成完后,绑定界面UI的初始化。(如我想知道玩家输入的名字叫什么,可以绑定Text获取,注:Button已经被绑定完成不需要重写绑定)。

其他可重写函数

  • onClick(GameObject BtObject):相应Button事件,通过传入的BtObject分辨每个Button。

SceneLogin.cs代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class SceneLogin : SceneBase {

private InputField playerName;
private Text warnText;

protected override void InitDate()
{
//初始化皮肤
setSkinPath("UI/Scene/" + SceneType.SceneLogin.ToString());
}

protected override void InitViewDate()
{
//绑定界面UI
playerName = skin.transform.Find("loginBackground/playerName").GetComponent<InputField>();
warnText = skin.transform.Find("warnText").GetComponent<Text>();
}

protected override void onClick(GameObject BtObject)
{
if (BtObject.name.Equals("BtGameStart"))
{
string name = playerName.text;
if (NameChick(name))
{
SceneMgr.Instance.Sequencer(SceneType.SceneMain, name);
}
else
{
warnText.text += "不符合规范";
warnText.gameObject.SetActive(true);
}
}
}

private bool NameChick(string name)
{
//正则表达式

if (name == null) return false;
if (name.Equals("/0")) return false;
if (name.Length < 0 || name.Length > 10) return false;

return true;
}

}

更新 —- 17年04月01日

加入消息机制框架。

更新 —- 17年12月23日

加入对象池:使用固定的对象池重用对象,取代单独地分配和释放对象,以此来达到提升性能和优化内存使用的目的。

加入单例管理:MonoSingletonMgr和SingletonMgr。

更新 —- 18年8月28日

重写MonoSingleton,修复Editor模式调用时产生多实例的问题,添加Create方法用于初始化。