Unity客户端架构-PanelManager
发表于2018-09-05
继续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客户端架构系列教程
