在unity專案開發中,ui模組的開發往往佔據了很大一部分工作,部分遊戲甚至絕大部分的工作都是在ui上,如何高效管理各種介面,下面就給大家分享一套高效易用的ui框架。
首先,我們定義乙個panelbase類,作為所有panel的父類,在這個類裡,我們可以給panel定義一套生命週期
//初始化
public virtual void init(){}
//開始面板前
public virtual void onshowing() { }
//顯示面板後
public virtual void onshowed() { }
//幀更新
public virtual void update() { }
//關閉前
public virtual void onclosing() { }
//關閉後
public virtual void onclosed() { }
所有介面類需要繼承panelbase類,並重寫這套生命週期函式,當然你不必每個介面都重寫這生命週期中所有的函式,具體情況還得具體分析。這裡以乙個介面loginpanel為例:
public class loginpanel : panelbase
{ #region 生命週期
//初始化
public override void init(s)
{//dosomething
}public override void onshowing()
{base.onshowing();
loginbtn.onclick.addlistener(onloginclick);
regbtn.onclick.addlistener(onregclick);
}#endregion
首先,在init函式中初始化一些屬性引數,onshowing函式為介面開啟時執行的函式,在loginpanel中也會寫一些本介面的邏輯處理。
最後,需要定義乙個panelmanager類,用來負責提供開啟和關閉某介面的功能,當需要開啟或者關閉某個介面時,呼叫該類中的open、close函式即可,這樣做的好處自然不必多說:
public void openpanel(string skinpath, params object args) where t : panelbase
{//已經開啟
string name = typeof(t).tostring();
if (dict.containskey(name))
return;
//面板指令碼
panelbase panel = canvas.addcomponent();
panel.init(args);
dict.add(name, panel);
panel.onshowing();
panel.onshowed();
}//關閉面板
public void closepanel(string name)
{panelbase panel = (panelbase)dict[name];
if (panel == null)
return;
panel.onclosing();
dict.remove(name);
panel.onclosed();
gameobject.destroy(panel.skin);
component.destroy(panel);
}
IOC框架之 Unity 入門
十年河東,十年河西,莫欺少年窮 學無止境,精益求精 unity是patterns practices團隊開發的乙個輕量級 可擴充套件的依賴注入容器,具有如下的特性 1.它提供了建立 或者裝配 物件例項的機制,而這些物件例項可能還包含了其它被依賴的物件例項。2.unity允許將預先配置的物件注入到類中...
Unity優化技術 UI優化之Mipmap
出處 mipmap技術有點類似於lod技術,但是不同的是,lod針對的是模型資源,而mipmap針對的紋理貼圖資源 使用mipmap後,貼圖會根據攝像機距離的遠近,選擇使用不同精度的貼圖。缺點 會占用記憶體,因為mipmap會根據攝像機遠近不同而生成對應的八個貼圖,所以必然佔記憶體!優點 會優化視訊...
Unity之簡易定時器Timer
有時候我們會有這樣的需求 幾秒或者幾幀之後做什麼事,也就是乙個定時器。這裡我利用time.realtimes artup實現了乙個簡單的秒鐘定時器,當然還可以利用time.framecount實現乙個幀計時器 上 using system using system.collections using...