纳金网
标题:
游戏框架-UI管理器
[打印本页]
作者:
may
时间:
2018-12-31 21:20
标题:
游戏框架-UI管理器
來自:UnityTerminator
using System;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 所有界面的基类
/// </summary>
public abstract class BaseWnd
{
protected Transform _transform;
/// <summary>
/// 打开窗口
/// </summary>
/// <param name="canvas"></param>
/// <param name="wndName"></param>
public void Open(Transform canvas,string wndName)
{
_transform = UnityEngine.Object.Instantiate(Resources.Load("UI/" + wndName) as GameObject).transform;
_transform.parent = canvas;
_transform.localPosition = Vector3.zero;
_transform.localScale = Vector3.one;
_transform.name = wndName;
}
/// <summary>
/// 关闭窗口
/// </summary>
public virtual void Close()
{
if(_transform != null && _transform.gameObject != null)
{
GameObject.Destroy(_transform.gameObject);
}
}
public virtual void Update(float dt)
{
}
}
public class WindowManager : Singleton<WindowManager>
{
private Transform _canvas;
/// <summary>
/// 保存所有打开的窗口
/// </summary>
private Dictionary<string, BaseWnd> _windows = new Dictionary<string, BaseWnd>();
public Camera uiCamera;
/// <summary>
/// 初始化
/// </summary>
public void Initialize()
{
MonoBehaviour.DontDestroyOnLoad(GameObject.Find("UI"));
_canvas = GameObject.Find("UI/Canvas").transform;
uiCamera = GameObject.Find("UI/Camera").GetComponent<Camera>();
}
/// <summary>
/// 打开界面
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T Open<T>() where T : BaseWnd, new()
{
string wndName = typeof(T).Name;
if (_windows.ContainsKey(wndName))
{
return _windows[wndName] as T;
}
else
{
T wnd = new T();
wnd.Open(_canvas, wndName);
_windows.Add(wndName, wnd);
return wnd;
}
}
/// <summary>
/// 关闭界面
/// </summary>
/// <typeparam name="T"></typeparam>
public void Close<T>() where T : BaseWnd
{
string wndName = typeof(T).Name;
if (_windows.ContainsKey(wndName))
{
_windows[wndName].Close();
_windows.Remove(wndName);
}
}
/// <summary>
/// 获得界面
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T GetWnd<T>() where T : BaseWnd
{
string wndName = typeof(T).Name;
if (_windows.ContainsKey(wndName))
{
return _windows[wndName] as T;
}
else
{
return null;
}
}
public void Update(float dt)
{
foreach (BaseWnd wnd in _windows.Values)
{
wnd.Update(dt);
}
}
public void Clear()
{
_windows.Clear();
}
}
复制代码
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5