Created
March 11, 2020 07:24
-
-
Save stilllisisi/b50c7a683a1bc983babfaaa76eefb257 to your computer and use it in GitHub Desktop.
【游戏-Unity】Unity搭建简易UI框架。在Unity项目开发中,UI模块的开发往往占据了很大一部分工作,部分游戏甚至绝大部分的工作都是在UI上,如何高效管理各种界面,下面就给大家分享一套高效易用的UI框架。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//首先,我们定义一个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<T>(string skinPath, params object[] args) where T : PanelBase | |
{ | |
//已经打开 | |
string name = typeof(T).ToString(); | |
if (dict.ContainsKey(name)) | |
return; | |
//面板脚本 | |
PanelBase panel = canvas.AddComponent<T>(); | |
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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://gameinstitute.qq.com/community/detail/128759