Unity搭建簡易UI框架之美

2021-09-26 07:01:52 字數 1786 閱讀 4915

在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...