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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chy_xfn/article/details/52972993

上篇介绍了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预设界面了。

猜你喜欢

转载自blog.csdn.net/chy_xfn/article/details/52972993
今日推荐