本文章框架借鑑自遊客學院UI框架。git
本文章的源碼可在個人GitHub中找到。github
本框架用的UGUI,比較難作出3D效果的界面,3D特效界面仍是用NGUI好一些。正則表達式
SceneLogin、SceneMain、SceneTest是演示的三個界面。數組
打開界面經過SceneMgr。框架
SceneMgr會調用SceneBase中的OnInit。ide
數據會傳輸到sceneDates不定長數組裏。函數
界面初始化會依次執行性能
1.InitDate() : 必須設置UI皮膚(UI的prefab),界面沒有生成前的初始化數據。優化
2.InitSkin() : 會自動執行,建立UI實例。spa
3.InitViewDate() : 界面生成完後,綁定界面UI的初始化。(如我想知道玩家輸入的名字叫什麼,能夠綁定Text獲取,注:Button已經被綁定完成不須要從新綁定)。
其餘可重寫函數
onClick(GameObject BtObject) : 響應Button事件,經過傳入的BtObject分辨每一個Button。
能夠在每一個界面的類中加專屬於這個界面的方法。
SceneLogin.cs代碼
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日---------
加入消息機制框架。
GitHub上已經給出源碼,用的觀察者模式(廢話),沒有用C#的委託,用的字典。源碼中也有使用方式。
----------更新 17年12月23日---------
加入對象池:使用固定的對象池重用對象,取代單獨地分配和釋放對象,以此來達到提高性能和優化內存使用的目的。
單例管理 MonoSingletonMgr SingletonMgr
----------更新 18年8月28日---------
重寫MonoSingleton,修復Editor模式調用時產生多實例的問題.
添加 Create 方法用於初始化