您的位置:首页 > 移动开发 > Unity3D

Unity中简单 UI 管理类 - UIManager

2015-11-03 14:21 483 查看

进入下一个界面

// Enter Next UI;
// MonoBehaviour can replace your UIBase Class;
public T Enter<T>() where T: MonoBehaviour
{
foreach(var o in mUIList)
{
T ui = o.GetComponent<T>();
if(ui!=null)
{
if(mGo_CurPage!=null)
{
mGo_CurPage.SetActive(false);
}
ui.gameObject.SetActive(true);

// ui init;
// ...
// ...

mGo_CurPage = ui.gameObject;
mCurOpenList.Add(mGo_CurPage);
return ui;
}
}
return null;
}


这里可以不继承MonoBehaviour类,可以自己定义一个 UIBase 类,用于一些初始化等操作

返回上一个界面

// Return Before UI;
public void Back()
{
for(int i=mCurOpenList.Count-1;i>=0;--i)
{
if(i>=0)
{

if(i-1>=0)
{
// before page;
mCurOpenList[i-1].SetActive(true);
// cur page;
mCurOpenList[i].SetActive(false);

RemoveOpenList(mGo_CurPage);

mGo_CurPage = mCurOpenList[i-1];
return ;
}
}
}
}


使用

例如你写了三个界面(三个Class)分别为

UIPage1

UIPage2

UIPage3

将这三个 Class 都挂在 gameObject 上面,拖到如图所示的地方



外部即可直接调用

UIManager.Enter();

UIManager.Back();

你也可以自己在外面再封装一层

完整代码

using System;
using System.Collections.Generic;
using UnityEngine;
public class UIPage1
{

}
public class UIPage2
{

}
public class UIPage3
{

}
public class UIManager : MonoBehaviour
{
public bool Debug = true;
public List<GameObject> mUIList = new List<GameObject>();

private List<GameObject> mCurOpenList = new List<GameObject>();
private GameObject mGo_CurPage=null;

void Start()
{
if(!Debug)
{
Enter<UIPage1>();
}
}

// Enter Next UI;
// MonoBehaviour can replace your UIBase Class;
public T Enter<T>() where T:MonoBehaviour
{
foreach(var o in mUIList)
{
T ui = o.GetComponent<T>();
if(ui!=null)
{
if(mGo_CurPage!=null)
{
mGo_CurPage.SetActive(false);
}
ui.gameObject.SetActive(true);

// ui init;
// ...
// ...

mGo_CurPage = ui.gameObject;
mCurOpenList.Add(mGo_CurPage);
return ui;
}
}
return null;
}

// Return Before UI;
public void Back()
{
for(int i=mCurOpenList.Count-1;i>=0;--i)
{
if(i>=0)
{

if(i-1>=0)
{
// before page;
mCurOpenList[i-1].SetActive(true);
// cur page;
mCurOpenList[i].SetActive(false);

RemoveOpenList(mGo_CurPage);

mGo_CurPage = mCurOpenList[i-1];
return ;
}
}
}
}

// Remove Opened UI;
void RemoveOpenList(GameObject go)
{
for(int i=0;i<mCurOpenList.Count;++i)
{
if(mCurOpenList[i] ==go)
{
mCurOpenList.RemoveAt(i);
return;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: