自定义UGUI界面抽象框架
使用UGUI来制作用户界面是很方便的,但如果每个界面都用原始的方法,独立写一个脚本对每个UI组件进行控制和操作,虽然一样能工作的很好,但对于后续拓展以及调试等工作会造成不小的麻烦,想象一下臃肿复杂的Start方法和Update方法,在需要修改的时候会非常痛苦。
因此一个比较抽象的,条理清晰的框架就显得很必要了,这种框架的设计方法有很多很多种,不同的人也会有不同的风格,但是基本思想都大同小异,无非就是将通用性强的功能抽象出来放入到基类里面,然后一层一层往下继承来具体描述特定的界面。
基于这样的思维,可以设计出简单而实用的抽象框架。
先从比较基础的方式入手,定义一个界面抽象基类如下
public abstract class BaseUIObject : MonoBehaviour {
private void Start() {
init();
}
protected void init() {
try {
loadViews();
setupTriggers();
} catch (Exception e) {
Debug.Log("ERROR in - " + gameObject.name);
Debug.Log(e.Message + "\n"+e.StackTrace);
}
}
protected virtual void loadViews() { // 载入视图组件
Debug.Log("No Implement for Function 'loadViews'! - " + getTagName());
}
protected virtual void setupTriggers() { // 设定界面事件
Debug.Log("No Implement for Function 'setupTriggers'! - " + getTagName());
}
public virtual void updateViews() { // 刷新
Debug.Log("No Implement for Function 'updateViews'! - " + getTagName());
}
public abstract string getTagName();
}
然后只要所有跟界面相关的控制类都继承这个基类便可以遵照一定的方法规律去实现功能,比如loadViews方法用于加载界面组件,setupTriggers方法用于设置各种组件的回调等等。
public class TestUIPanel : BaseUIObject {
private InputField userNameInput;
private InputField passWordInput;
private Button loginBtn;
protected override void loadViews() {
userNameInput = transform.Find(