Unity UI框架开发(2)--实现UIBaseWindow

来源:互联网 发布:分布式关系型数据库 编辑:程序博客网 时间:2024/06/05 14:32

上篇介绍了UI框架的实现原理了,现在就是正式用代码实现UI框架了。
从上篇博客中我举例了实现这个框架用到的三个基类 UIBaseWindow、UIBaseView和UIWindowCtrl;那么下面将分别实现它们。
首先是窗口类UIBaseWindow:

public class UIBaseWindow {    public GameObject winParent = null;    public virtual void OnCreate(string winName)    {        if (winParent == null){        // GameSettings.GetInstance().UIWin是一个对象,可自定义,也可以直接使用CanVas,反正是用来存放UI的            winParent = ResMgr.CreateEmptyGameObject(GameSettings.GetInstance().UIWin, winName);        }    }    // 在当前窗口切换其他窗口    public void StartWindow(System.Type windowName)    {        UIWindowCtrl.GetInstance().ShowWindow(windowName);    }    // 重现当前窗口    public virtual void OnResume()    {        winParent.SetActive(true);    }    // 隐藏当前窗口    public virtual void OnStop()    {        winParent.SetActive(false);    }}

该基类主要封装了几个方法,都很简单,主要说下几点。
(1)OnCreate(string winName)方法创建一个空对象,是用来存放该窗口的后续所有子对象,其中用到调用的方法是我封装的一个方法。

    public static GameObject CreateEmptyGameObject(GameObject parent, string name)    {        GameObject obj = new GameObject(name);        obj.transform.SetParent(parent.transform);        obj.transform.localPosition = Vector3.zero;        obj.transform.localEulerAngles = Vector3.zero;        obj.transform.localScale = Vector3.one;        return obj;    }

(2)StartWindow(System.Type windowName)方法是启动一个窗口,参数是一个窗口类名的类型,如:typeof(Win_Shop);至于调用的UIWindowCtrl类方法将在后面说明。

下面我们实现一个继承于基类的具体窗口类Win_Main。

public class Win_Main : UIBaseWindow {    private MainView mMainView;    public override void OnCreate(string winName)    {        base.OnCreate(winName);        mMainView = new MainView(this, "Prefas/UI/UIMain/MainView");    }    public override void OnResume()    {        base.OnResume();    }}

好了,现在我们再来梳理下这个UI框架,以上面代码为例;比如我要显示一个主界面Main,这个界面主要包含一些背景图和、商城、设置、帮助、等按钮,这些都做成一个预设MainView,然后从上面代码看到一个同名类MainView,该类实现了预设的各种功能。所以当我要OnCreate()一个窗口时就会调用这个MainVeiw预设界面了。

0 0
原创粉丝点击