记录下今天学习的SIKI老师的UI框架:
首先是最为重要的UIManager,这个类用来管理所有UI的JSON路径解析、根据请求得到相应的UI、出栈和入栈操作,是整个UI框架的核心。使用Dictionary分别存储UI路径和UI基类,使用栈存储需要显示的UI面板。
public class UIManager
{
private Dictionary<UIPanelType, string> panelPathDict; //存储路径
private Dictionary<UIPanelType, BasePanel> panelDict; //存储UI类
private Stack panelStack; //基类栈
//入栈和出栈操作即为实现UI的显示与关闭
public void PushPanel(UIPanelType panelType){}
public void PopPanel(){}
private BasePanel GetPanel(UIPanelType panelType){} //根据面板类型得到面板
private void ParseUIPanelTypeJson(){} //解析JSON路径
} 代码不全,只是将这些最重要的核心复制过来
接着是BasePanel基类面板,为所有UI提供OnEnter()、OnPause()、OnResume()、OnExit()的virtual方法。
public class BasePanel : MonoBehaviour
{
public virtual void OnEnter() { }
public virtual void OnPause() { }
public virtual void OnResume() { }
public virtual void OnExit() { }
}
其他的就相对简单了,为所有的UI面板创建脚本,重写BasePanel的方法实现需要的操作,为所有的UI面板提供一个枚举类型的类用来查找。
使用UI框架有许多便利性,每当添加UI面板,不用再考虑他的打开、关闭、暂停和恢复,这些操作全部交给UIManager去实现,每个新的UI只需要考虑自身的一些逻辑操作,让代码的复用性更强了。