Unity客户端架构-PanelManager

发表于2018-09-05
评论0 2.3k浏览
继续Unity客户端架构系列的介绍,上一篇中给大家介绍了Resource的使用,这一篇我们就来看看PanelManager的使用。

直接上代码:
using UnityEngine;
using System.Collections;
using System.Diagnostics;
using System;
public class PanelManager : MonoBehaviour {
    private Transform parent;
    private string path;
    public Transform Parent
    {
        get
        {
            if (this.parent == null)
            {
                GameObject gui = io.Gui;
                if (gui)
                {
                    this.parent = gui.transform.Find("Camera");
                }
            }
            return this.parent;
        }
    }
    public void CreatePanel(DialogType type)
    {
#if UNITY_EDITOR
        string typename = Util.ConvertPanelName(type);
        this.CreatePanel(typename);
#else 
        base.StartCoroutine(this.OnCreatePanel(type));
#endif
    }
    private IEnumerator OnCreatePanel(DialogType type)
    {
        path = Util.AppContentDataUri + "UI/" + type.ToString() + "Panel.unity3d";
        GameObject go = null;
        WWW bundle = new WWW(path);
        yield return bundle;
        try
        {
            if (bundle.assetBundle.Contains(type.ToString() + "Panel"))
            {
                go = Instantiate(bundle.assetBundle.Load(type.ToString() + "Panel" + typeof(GameObject))) as GameObject;
            }
        }
        catch (System.Exception e)
        {
            NGUIDebug.Log("catch go..... " + e.ToString());
        }
        go.name = type.ToString() + "Panel";
        go.transform.parent = UIContainer.instance.transform;
        go.transform.localPosition = Vector3.zero;
        go.transform.localScale = Vector3.one;
        bundle.assetBundle.Unload(false);
    }
    public void CreatePanel(string name)
    {
        if (this.Parent.FindChild(name) != null)
        {
            return;
        }
        GameObject gameObject = Util.LoadPrefab(Const.PanelPrefabDir + name + ".prefab");
        if (gameObject == null)
        {
            return;
        }
//         GameObject go = GameObject.Instantiate(gameObject) as GameObject;
//         go.transform.localPosition = Vector3.zero;
//         go.name = name;
        GameObject gameObject2 = Util.AddChild(gameObject, UIContainer.instance.transform);
        gameObject2.name = name;
        gameObject2.transform.localPosition = Vector3.zero;
        this.OnCreatePanel(name, gameObject2);
    }
     private void OnCreatePanel(string name, GameObject go)
    {
        switch (name)
        {
            case "LoginPanel":
                this.OnLoginPanel(go);
                break;
            case "CharacterPanel":
                this.OnCharacterPanel(go);
                break;
            case "MainPanel":
                this.OnMainPanel(go);
                break;
            case "WorldPanel":
                this.OnWorldPanel(go);
                break;
            case "DuplicatePanel":
                this.OnDuplicatePanel(go);
                break;
        }
    }
    private void OnLoginPanel(GameObject go)
     {
         go.transform.localPosition = new Vector3(0f, 0f, 0f);
         io.container.loginPanel = go;
     }
    private void OnCharacterPanel(GameObject go)
    {
        go.transform.localPosition = new Vector3(0f, 0f, 0f);
        io.container.characterPanel = go;
    }
    private void OnMainPanel(GameObject go)
    {
        go.transform.localPosition = new Vector3(0f, 0f, 0f);
        io.container.mainPanel = go;
    }
    private void OnDuplicatePanel(GameObject go)
    {
        go.transform.localPosition = new Vector3(0f, 0f, 0f);
        io.container.duplicatePanel = go;
    }
    private void OnWorldPanel(GameObject go)
    {
        go.transform.localPosition = new Vector3(0f, 0f, 0f);
        io.container.WorldPanel = go;
    }
}

Unity客户端架构系列教程

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引