查看: 2020|回复: 0
打印 上一主题 下一主题

[经验分享] 游戏框架-UI管理器

[复制链接]
may    

8830

主题

80

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52304
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2018-12-31 21:20:27 |只看该作者 |倒序浏览

來自:UnityTerminator
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;

  4. /// <summary>
  5. /// 所有界面的基类
  6. /// </summary>
  7. public abstract class BaseWnd
  8. {
  9.     protected Transform _transform;

  10.     /// <summary>
  11.     /// 打开窗口
  12.     /// </summary>
  13.     /// <param name="canvas"></param>
  14.     /// <param name="wndName"></param>
  15.     public void Open(Transform canvas,string wndName)
  16.     {
  17.         _transform = UnityEngine.Object.Instantiate(Resources.Load("UI/" + wndName) as GameObject).transform;
  18.         _transform.parent = canvas;
  19.         _transform.localPosition = Vector3.zero;
  20.         _transform.localScale = Vector3.one;
  21.         _transform.name = wndName;
  22.     }

  23.     /// <summary>
  24.     /// 关闭窗口
  25.     /// </summary>
  26.     public virtual void Close()
  27.     {
  28.         if(_transform != null && _transform.gameObject != null)
  29.         {
  30.             GameObject.Destroy(_transform.gameObject);
  31.         }
  32.     }

  33.     public virtual void Update(float dt)
  34.     {

  35.     }
  36. }

  37. public class WindowManager : Singleton<WindowManager>
  38. {
  39.     private Transform _canvas;

  40.     /// <summary>
  41.     /// 保存所有打开的窗口
  42.     /// </summary>
  43.     private Dictionary<string, BaseWnd> _windows = new Dictionary<string, BaseWnd>();

  44.     public Camera uiCamera;

  45.     /// <summary>
  46.     /// 初始化
  47.     /// </summary>
  48.     public void Initialize()
  49.     {
  50.         MonoBehaviour.DontDestroyOnLoad(GameObject.Find("UI"));
  51.         _canvas = GameObject.Find("UI/Canvas").transform;
  52.         uiCamera = GameObject.Find("UI/Camera").GetComponent<Camera>();
  53.     }

  54.     /// <summary>
  55.     /// 打开界面
  56.     /// </summary>
  57.     /// <typeparam name="T"></typeparam>
  58.     /// <returns></returns>
  59.     public T Open<T>() where T : BaseWnd, new()
  60.     {
  61.         string wndName = typeof(T).Name;
  62.         if (_windows.ContainsKey(wndName))
  63.         {
  64.             return _windows[wndName] as T;
  65.         }
  66.         else
  67.         {
  68.             T wnd = new T();
  69.             wnd.Open(_canvas, wndName);
  70.             _windows.Add(wndName, wnd);
  71.             return wnd;
  72.         }
  73.     }

  74.     /// <summary>
  75.     /// 关闭界面
  76.     /// </summary>
  77.     /// <typeparam name="T"></typeparam>
  78.     public void Close<T>() where T : BaseWnd
  79.     {
  80.         string wndName = typeof(T).Name;
  81.         if (_windows.ContainsKey(wndName))
  82.         {
  83.             _windows[wndName].Close();
  84.             _windows.Remove(wndName);
  85.         }
  86.     }

  87.     /// <summary>
  88.     /// 获得界面
  89.     /// </summary>
  90.     /// <typeparam name="T"></typeparam>
  91.     /// <returns></returns>
  92.     public T GetWnd<T>() where T : BaseWnd
  93.     {
  94.         string wndName = typeof(T).Name;
  95.         if (_windows.ContainsKey(wndName))
  96.         {
  97.             return _windows[wndName] as T;
  98.         }
  99.         else
  100.         {
  101.             return null;
  102.         }
  103.     }

  104.     public void Update(float dt)
  105.     {
  106.         foreach (BaseWnd wnd in _windows.Values)
  107.         {
  108.             wnd.Update(dt);
  109.         }
  110.     }

  111.     public void Clear()
  112.     {
  113.         _windows.Clear();
  114.     }
  115. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-25 07:16 , Processed in 0.080958 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部