您的位置:首页 > 科技 > 能源 > 查网站_京东商城平台商户_品牌策划推广方案_建立一个国外的网站

查网站_京东商城平台商户_品牌策划推广方案_建立一个国外的网站

2024/12/23 14:33:26 来源:https://blog.csdn.net/tianjuewudi/article/details/142850671  浏览:    关键词:查网站_京东商城平台商户_品牌策划推广方案_建立一个国外的网站
查网站_京东商城平台商户_品牌策划推广方案_建立一个国外的网站

需求:为了方便UI的管理,编写一个管理类,管理所有UI的加载、隐藏或销魂,每个UI都继承自一个UIWindow类,存放在Resource的指定目录下,通过UIManager进行管理。每个继承自UIWindow的UI天然有UI的打开关闭等基本功能。

UIWindow

using UnityEngine;public abstract class UIWindow : MonoBehaviour
{public delegate void CloseHandler(UIWindow sender, WindowResult result);public event CloseHandler OnClose;public UIWindowType WindowType= UIWindowType.Page;public virtual System.Type Type { get { return this.GetType(); } }public GameObject Root;public enum WindowResult{None = 0,Yes,No,}public void Close(WindowResult result = WindowResult.None){UIManager.Instance.Close(this.Type);if (this.OnClose != null)this.OnClose(this, result);this.OnClose = null;}public virtual void OnCloseClick(){this.Close();}public virtual void OnYesClick(){this.Close(WindowResult.Yes);}public virtual void OnNoClick(){this.Close(WindowResult.No);}
}

UIManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;public class UIManager : Singleton<UIManager>
{class UIElement{public string Resources;public bool Cache ;public GameObject Instance;}private Dictionary<Type, UIElement> UIResources = new();private Transform UIParent;public void Init( Transform parent = null){UIParent = parent;//UI在这注册UIResources.Add(typeof(UIHomePage), new UIElement() { Resources = "Prefabs/UI/HomePage/UIHomePage", Cache= true });}public T Show<T>() where T : class{Type type = typeof(T);if (UIResources.ContainsKey(type)){UIElement info = UIResources[type];if (info.Instance != null){info.Instance.SetActive(true);}else{if (Resources.Load(info.Resources) == null){return default;}info.Instance = GameObject.Instantiate(ResourcesManager.Instance.LoadAsset<GameObject>(info.Resources));}return info.Instance.GetComponent<T>();}return default;}public void Close(Type type){if (UIResources.ContainsKey(type)){UIElement info = UIResources[type];if (info.Cache){info.Instance.SetActive(false);}else{GameObject.Destroy(info.Instance);info.Instance = null;}}}public void Close<T>(){Close(typeof(T));}public void CloseIfShow<T>(){Type type = typeof(T);if(UIResources.ContainsKey(type)&& UIResources[type].Instance && UIResources[type].Instance.activeSelf == true){Close(typeof(T));}}}

使用

如果要给组件挂上UIHomePage脚本,则给它继承一下UIWindow

public class AddressPageUI : UIWindow
{

然后在上面的UIManager注册函数即可,

UIResources.Add(typeof(UIHomePage), new UIElement() { Resources = "Prefabs/UI/HomePage/UIHomePage", Cache= true });

加载时

UIManager .Instance.Show<AddressPageUI >();

关闭时

UIManager .Instance.Close<AddressPageUI>();

如果UI上有关闭确定等按钮,直接管理基类中的函数即可,无需另外编写函数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com