Unity3D自学笔记——UGUI前台架构

来源:互联网 发布:淘宝买家信誉怎么算的 编辑:程序博客网 时间:2024/05/01 22:15

这里写图片描述
UISingleton
UI组件单例模式

public class UISingleton<T> : MonoBehaviour where T : UISingleton<T>{    private static T instance = null;    public static T Instance    {        get        {            if (instance == null)            {                instance = FindObjectOfType(typeof(T)) as T;                if (instance == null)                {                    instance = new GameObject("_" + typeof(T).Name).AddComponent<T>();                    DontDestroyOnLoad(instance);                }                if (instance == null)                    Debug.LogError("Failed to create instance of " + typeof(T).FullName + ".");            }            return instance;        }    }    void OnApplicationQuit() { if (instance != null) instance = null; }    public static T CreateInstance()    {        if (Instance != null) Instance.OnCreate();        return Instance;    }    protected virtual void OnCreate()    {    }}

UIInfo
置于UGUI顶级节点,即Cavans的组件,其作用是初始化UIManager和PotonManger及调用UIManagr初始化UIScene的显示

public class UIInfo : UISingleton<UIInfo> {    private UIManager uiManager;    private PhotonManager photonManager;    void Awake()    {        InitUIManager();        InitPhotonManger();    }    void InitUIManager()    {        Object obj = FindObjectOfType(typeof(UIManager));        if (obj != null)            uiManager = obj as UIManager;        if (uiManager == null)        {            GameObject manger = new GameObject("UIManager");            uiManager = manger.AddComponent<UIManager>();        }        uiManager.InitializeUIs();  //初始化UIManager        uiManager.SetTitleVisible(true);//显示开始游戏一级界面    }    void InitPhotonManger()    {        Object obj = FindObjectOfType(typeof(PhotonManager));        if (obj != null)            photonManager = obj as PhotonManager;        if (photonManager == null)        {            GameObject manger = new GameObject("PhotonManager");            photonManager = manger.AddComponent<PhotonManager>();        }    }}

UIManager
UIScene管理类,首先将所有UIScene加入缓存,再动态的负责加载,显示或隐藏UIScene

public class UIManager : UISingleton<UIManager>{    private Dictionary<string, UIScene> mUIScene = new Dictionary<string, UIScene>();    public void InitializeUIs()    {        mUIScene.Clear();        Object[] uis = FindObjectsOfType(typeof(UIScene));        if (uis != null)        {            foreach (Object obj in uis)            {                UIScene ui = obj as UIScene;                ui.SetVisible(false);                mUIScene.Add(ui.gameObject.name, ui);            }        }    }    public UIScene SetVisible(string name, bool visible)    {        if (visible && !IsVisible(name))        {            return OpenScene(name);        }        else if (!visible && IsVisible(name))        {            return CloseScene(name);        }        return mUIScene[name]; ;    }    public bool IsVisible(string name)    {        UIScene ui = GetUI(name);        if (ui != null)            return ui.IsVisible();        return false;    }    private UIScene GetUI(string name)    {        UIScene ui;        return mUIScene.TryGetValue(name, out ui) ? ui : null;    }    public T GetUI<T>(string name) where T : UIScene    {        return GetUI(name) as T;    }    private bool isLoaded(string name)    {        if (mUIScene.ContainsKey(name))        {            return true;        }        return false;    }    private UIScene OpenScene(string name)    {        if (isLoaded(name))        {            mUIScene[name].SetVisible(true);        }        return mUIScene[name];    }    private UIScene CloseScene(string name)    {        if (isLoaded(name))        {            mUIScene[name].SetVisible(false);        }        return mUIScene[name];    }    //显示一级界面    public UIScene SetTitleVisible(bool visible)    {        return SetVisible(UIName.UILogin, visible);    }}

UIScene
管理UIScene下的所有UISceneWidget, 同样先缓存,在动态管理

public class UIScene : MonoBehaviour{    protected string mUIName = "";    private Dictionary<string, UISceneWidget> mUIWidgets = new Dictionary<string, UISceneWidget>();    public ESceneType type = ESceneType.Nomal;    protected virtual void Start()    {        this.FindChildWidgets(gameObject.transform);    }    protected virtual void Update()    {    }    public virtual bool IsVisible()    {        return gameObject.activeSelf;    }    public virtual void SetVisible(bool visible)    {        gameObject.SetActive(visible);    }    protected UISceneWidget GetWidget(string name)    {        // If allready find out, return         if (mUIWidgets.ContainsKey(name))            return mUIWidgets[name];        // Find out widget with name and add to dictionary        Transform t = gameObject.transform.FindChild(name);        if (t == null) return null;        UISceneWidget widget = t.gameObject.GetComponent<UISceneWidget>();        if (widget != null)        {            mUIWidgets.Add(widget.gameObject.name, widget);        }        return t.gameObject.GetComponent<UISceneWidget>();    }    protected T GetWidget<T>(string name) where T : Component    {        // Find out widget with name and add to dictionary        GameObject go = GameObject.Find(name);        if (go == null) return null;        T widget = go.GetComponent<T>();        return widget;    }    private void FindChildWidgets(Transform t)    {        UISceneWidget widget = t.gameObject.GetComponent<UISceneWidget>();        if (widget != null)        {            string name = t.gameObject.name;            if (!mUIWidgets.ContainsKey(name))            {                mUIWidgets.Add(name, widget);            }        }        for (int i = 0; i < t.childCount; ++i)        {            Transform child = t.GetChild(i);            FindChildWidgets(child);        }    }}

UISceneWidget
界面控件类,用户捕获触发事件

public class UISceneWidget : EventTrigger{    public event Action<PointerEventData> BeginDrag;    public event Action<BaseEventData> Cancel;    public event Action<BaseEventData> Deselect;    public event Action<PointerEventData> Drag;    public event Action<PointerEventData> Drop;    public event Action<PointerEventData> EndDrag;    public event Action<PointerEventData> InitializePotentialDrag;    public event Action<AxisEventData> Move;    public event Action<PointerEventData> PointerClick;    public event Action<PointerEventData> PointerDown;    public event Action<PointerEventData> PointerEnter;    public event Action<PointerEventData> PointerExit;    public event Action<PointerEventData> PointerUp;    public event Action<PointerEventData> Scroll;    public event Action<BaseEventData> Select;    public event Action<BaseEventData> Submit;    public event Action<BaseEventData> UpdateSelected;    /// <summary>    /// 获取指定UGUI游戏物体的事件监听器    /// </summary>    /// <param name="go"></param>    /// <returns></returns>    public static UISceneWidget Get(GameObject go)    {        UISceneWidget widget = go.GetComponent<UISceneWidget>();        if (!widget) widget = go.AddComponent<UISceneWidget>();        return widget;    }    public override void OnBeginDrag(PointerEventData eventData)    {        if (BeginDrag != null) BeginDrag(eventData);    }    public override void OnCancel(BaseEventData eventData)    {        if (Cancel != null) Cancel(eventData);    }    public override void OnDeselect(BaseEventData eventData)    {        if (Deselect != null) Deselect(eventData);    }    public override void OnDrag(PointerEventData eventData)    {        if (Drag != null) Drag(eventData);    }    public override void OnDrop(PointerEventData eventData)    {        if (Drop != null) Drop(eventData);    }    public override void OnEndDrag(PointerEventData eventData)    {        if (EndDrag != null) EndDrag(eventData);    }    public override void OnInitializePotentialDrag(PointerEventData eventData)    {        if (InitializePotentialDrag != null) InitializePotentialDrag(eventData);    }    public override void OnMove(AxisEventData eventData)    {        if (Move != null) Move(eventData);    }    public override void OnPointerClick(PointerEventData eventData)    {        if (PointerClick != null) PointerClick(eventData);    }    public override void OnPointerDown(PointerEventData eventData)    {        if (PointerDown != null) PointerDown(eventData);    }    public override void OnPointerEnter(PointerEventData eventData)    {        if (PointerEnter != null) PointerEnter(eventData);    }    public override void OnPointerExit(PointerEventData eventData)    {        if (PointerExit != null) PointerExit(eventData);    }    public override void OnPointerUp(PointerEventData eventData)    {        if (PointerUp != null) PointerUp(eventData);    }    public override void OnScroll(PointerEventData eventData)    {        if (Scroll != null) Scroll(eventData);    }    public override void OnSelect(BaseEventData eventData)    {        if (Select != null) Select(eventData);    }    public override void OnSubmit(BaseEventData eventData)    {        if (Submit != null) Submit(eventData);    }    public override void OnUpdateSelected(BaseEventData eventData)    {        if (UpdateSelected != null) UpdateSelected(eventData);    }}
0 0
原创粉丝点击