From 2930feb3d8000a18297f946d5177193011873753 Mon Sep 17 00:00:00 2001 From: zhangzheng Date: Fri, 12 Dec 2025 16:34:53 +0800 Subject: [PATCH] 111 --- .../Tools/PanelSystem/Base/BasePanel.cs | 189 ++++-------- .../Tools/PanelSystem/Base/BaseRenderPanel.cs | 289 ++++++++++++++++++ .../PanelSystem/Base/BaseRenderPanel.cs.meta | 3 + .../Tools/PanelSystem/Manager/PanelSystem.cs | 56 ++-- .../Manager/SpriteRendererSystem.cs | 235 ++++++++++++++ .../Manager/SpriteRendererSystem.cs.meta | 3 + .../Runtime/VideoSystemPanel/VideoPanel.cs | 1 - Assets/00.StaryEvoTools/package.json | 2 +- 8 files changed, 624 insertions(+), 154 deletions(-) create mode 100644 Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs create mode 100644 Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs.meta create mode 100644 Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs create mode 100644 Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs.meta diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs index 9dc3f0c..39f1e33 100644 --- a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs @@ -21,29 +21,34 @@ namespace Stary.Evo.UIFarme /// 绑定这个面板的实例 /// void Initialize(GameObject panelGo); - /// /// 绑定这个面板的实例 /// Task InitializeAsync(GameObject panelGo); - /// /// 初始化面板管理器 /// /// void Initialize(IPanelSystem sysytem); - /// /// 初始化面板管理器 /// /// Task InitializeAsync(IPanelSystem sysytem); - /// /// 虚方法,UI进入时执行的操作,只会执行一次 /// void OnEnter(Action complete = null); + /// + /// 虚方法,UI暂停时执行的操作,只会执行一次 + /// + void OnPause(); + + /// + /// 虚方法,UI继续时执行的操作,只会执行一次 + /// + void OnResume(); /// /// 虚方法,UI退出时执行的操作,只会执行一次 @@ -58,7 +63,7 @@ namespace Stary.Evo.UIFarme /// /// ui信息 /// - Task CreatePanel(string packageName, string panelName); + Task CreatePanel(string panelName, string packageName); /// /// 销毁一个Ui对象 @@ -81,8 +86,6 @@ namespace Stary.Evo.UIFarme public abstract UITweenType TweenType { get; } - public abstract UIInstantiateType UIType { get; } - /// /// 面板管理器 /// @@ -94,44 +97,31 @@ namespace Stary.Evo.UIFarme protected Transform panelParent { get; private set; } - /// - /// 缓存该面板所有的SpriteRenderer - /// - private Dictionary spriteRendererDict; - /// /// 缓存该面板所有的Button,Toggle,Slider,InputField,Dropdown,ScroolBar /// private Dictionary selectableDict; + + protected CanvasGroup canvasGroup { get; private set; } + protected GameObject activePanel { get; private set; } protected BasePanel() { - spriteRendererDict = new Dictionary(); selectableDict = new Dictionary(); } public virtual void Initialize(GameObject panelGo) { activePanel = panelGo; - if (UIType == UIInstantiateType.SpriteNormal) + Selectable[] selectables = activePanel.GetComponentsInChildren(true); + foreach (Selectable item in selectables) { - SpriteRenderer[] spriteRenderers = activePanel.GetComponentsInChildren(true); - foreach (SpriteRenderer item in spriteRenderers) - { - spriteRendererDict[item.name] = item; - } - }else if(UIType == UIInstantiateType.UINormal){ - Selectable[] selectables = activePanel.GetComponentsInChildren(true); - foreach (Selectable item in selectables) - { - selectableDict[item.name] = item; - } - var canvasGroup = UITool.GetOrAddComponent(activePanel); - canvasGroup.alpha = 0f; + selectableDict[item.name] = item; } - + canvasGroup = UITool.GetOrAddComponent(activePanel); + canvasGroup.alpha = 0f; } public virtual Task InitializeAsync(GameObject panelGo) @@ -155,15 +145,43 @@ namespace Stary.Evo.UIFarme public virtual void OnEnter(Action complete = null) { activePanel.SetActive(true); + canvasGroup.blocksRaycasts = true; + if (TweenType == UITweenType.None) + { + canvasGroup.alpha = 1f; + } - - SetCanvasGroupTween(1f, complete); + if (TweenType == UITweenType.Fade) + { + canvasGroup.DOFade(1f, 2f).OnComplete(() => { complete?.Invoke(); }); + } + else if (TweenType == UITweenType.Yoyo) + { + canvasGroup.DOFade(1, 2f).SetLoops(2, LoopType.Yoyo).OnComplete(() => { complete?.Invoke(); }); + } + else + { + canvasGroup.DOFade(1, 2f).SetLoops(-1).OnComplete(() => { complete?.Invoke(); }); + } } + public virtual void OnPause() + { + canvasGroup.blocksRaycasts = false; + } + + public virtual void OnResume() + { + canvasGroup.blocksRaycasts = true; + } public virtual void OnExit(float delay = 0f) { - SetCanvasGroupTween(0f, () => { activePanel.SetActive(false); }); + canvasGroup.DOFade(0f, delay).OnComplete(() => + { + activePanel.SetActive(false); + canvasGroup.blocksRaycasts = false; + }); } public virtual void OnDestroy() @@ -172,7 +190,7 @@ namespace Stary.Evo.UIFarme } - public async Task CreatePanel(string packageName, string panelName) + public async Task CreatePanel(string panelName, string packageName) { if (panelParent == null) { @@ -184,8 +202,7 @@ namespace Stary.Evo.UIFarme return activePanel.gameObject; } #if HotUpdate - - AssetHandle handle = null; + AssetHandle handle = null; if (packageName == null) { handle = YooAssets.LoadAssetAsync(panelName); @@ -212,15 +229,14 @@ namespace Stary.Evo.UIFarme #endif - activePanel.name = this.GetType().Name; - // if (!activePanel.GetComponentInChildren() && !activePanel.GetComponentInParent()) - // { - // Debug.LogError($"UnityEvo:panelParent上不存在Canvas组件,{panelName}无法正常运行,进程已中断,请检查!!!!!"); - // return null; - // } + if (!activePanel.GetComponentInChildren() && !activePanel.GetComponentInParent()) + { + Debug.LogError($"UnityEvo:panelParent上不存在Canvas组件,{panelName}无法正常运行,进程已中断,请检查!!!!!"); + return null; + } return activePanel; } @@ -239,79 +255,21 @@ namespace Stary.Evo.UIFarme panelParent = parent; } - private void SetCanvasGroup(float alpha) + /// + /// 获取组件:Button,Toggle,Slider,InputField,Dropdown,ScroolBar + /// + /// + /// + /// + protected T GetComp(string name) where T : Selectable { - foreach (var spriteRenderer in spriteRendererDict) + selectableDict.TryGetValue(name, out Selectable t); + if (t == null) { - Color c = spriteRenderer.Value.color; - c.a = alpha; - spriteRenderer.Value.color = c; + Debug.LogError($"{this.GetType()}---{name}:在selectableDict不存在"); } - } - private void SetCanvasGroupTween(float alpha, Action complete = null) - { - if (UIType == UIInstantiateType.SpriteNormal) - { - // 创建一个新的序列 - Sequence sequence = DOTween.Sequence(); - - - foreach (var spriteRenderer in spriteRendererDict) - { - if (TweenType == UITweenType.None) - { - Color c = spriteRenderer.Value.color; - c.a = alpha; - spriteRenderer.Value.color = c; - } - else if (TweenType == UITweenType.Fade) - { - sequence.Join(spriteRenderer.Value.DOFade(alpha, 1f)); - } - else if (TweenType == UITweenType.Yoyo) - { - sequence.Join(spriteRenderer.Value.DOFade(alpha, 1f) - .SetLoops(2, LoopType.Yoyo)); - } - } - - if (TweenType == UITweenType.None) - { - complete?.Invoke(); - } - else - { - sequence.OnComplete(() => complete?.Invoke()); - } - } - else if (UIType == UIInstantiateType.UINormal) - { - activePanel.SetActive(true); - var canvasGroup = activePanel.GetComponent(); - canvasGroup.blocksRaycasts = true; - if (TweenType == UITweenType.None) - { - canvasGroup.alpha = alpha; - } - - if (TweenType == UITweenType.Fade) - { - canvasGroup.DOFade(alpha, 1f).OnComplete(() => - { - complete?.Invoke(); - canvasGroup.blocksRaycasts = false; - }); - } - else if (TweenType == UITweenType.Yoyo) - { - canvasGroup.DOFade(alpha, 1f).SetLoops(2, LoopType.Yoyo).OnComplete(() => { complete?.Invoke(); }); - } - else - { - canvasGroup.DOFade(alpha, 1f).SetLoops(-1).OnComplete(() => { complete?.Invoke(); }); - } - } + return t as T; } public IArchitecture GetArchitecture() @@ -341,18 +299,5 @@ namespace Stary.Evo.UIFarme /// Yoyo, } - - public enum UIInstantiateType - { - /// - /// 普通面板 - /// - SpriteNormal, - - /// - /// UI普通面板 - /// - UINormal - } } } \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs new file mode 100644 index 0000000..6349558 --- /dev/null +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs @@ -0,0 +1,289 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using DG.Tweening; +using UnityEngine; +using UnityEngine.UI; +#if HotUpdate +using YooAsset; +#endif + +namespace Stary.Evo.UIFarme +{ + public interface IBaseRenderPanel : IController + { + /// + /// UI信息 + /// + string UIName { get; set; } + + /// + /// 绑定这个面板的实例 + /// + void Initialize(GameObject panelGo); + + /// + /// 绑定这个面板的实例 + /// + Task InitializeAsync(GameObject panelGo); + + /// + /// 初始化面板管理器 + /// + /// + void Initialize(ISpriteRenderSystem sysytem); + + /// + /// 初始化面板管理器 + /// + /// + Task InitializeAsync(ISpriteRenderSystem sysytem); + + /// + /// 虚方法,UI进入时执行的操作,只会执行一次 + /// + void OnEnter(Action complete = null); + + + /// + /// 虚方法,UI退出时执行的操作,只会执行一次 + /// + void OnExit(float delay = 0f); + + void OnDestroy(); + + + /// + /// 生成/获取一个UI对象 + /// + /// ui信息 + /// + Task CreatePanel(string packageName, string panelName); + + /// + /// 销毁一个Ui对象 + /// + /// + void DestoryUI(); + + void SetPanelParent(Transform parent); + } + + /// + ///所有UI面板的父类,包含UI面板的状态信息 + /// + public abstract class BaseRenderPanel : IBaseRenderPanel + { + /// + /// UI信息 + /// + public string UIName { get; set; } + + public abstract UITweenType TweenType { get; } + + + /// + /// 面板管理器 + /// + protected ISpriteRenderSystem PanelSystem { get; private set; } + + /// + /// 生成的父物体 + /// + protected Transform panelParent { get; private set; } + + + /// + /// 缓存该面板所有的SpriteRenderer + /// + private Dictionary spriteRendererDict; + + + protected GameObject activePanel { get; private set; } + + protected void Awake() + { + spriteRendererDict = new Dictionary(); + } + + public virtual void Initialize(GameObject panelGo) + { + activePanel = panelGo; + + SpriteRenderer[] spriteRenderers = activePanel.GetComponentsInChildren(true); + foreach (SpriteRenderer item in spriteRenderers) + { + spriteRendererDict[item.name] = item; + } + } + + public virtual Task InitializeAsync(GameObject panelGo) + { + Initialize(panelGo); + return Task.CompletedTask; + } + + public virtual void Initialize(ISpriteRenderSystem sysytem) + { + PanelSystem = sysytem; + } + + public virtual Task InitializeAsync(ISpriteRenderSystem sysytem) + { + Initialize(sysytem); + return Task.CompletedTask; + } + + + public virtual void OnEnter(Action complete = null) + { + activePanel.SetActive(true); + + + SetCanvasGroupTween(1f, complete); + } + + + public virtual void OnExit(float delay = 0f) + { + SetCanvasGroupTween(0f, () => { activePanel.SetActive(false); }); + } + + public virtual void OnDestroy() + { + DestoryUI(); + } + + + public async Task CreatePanel(string packageName, string panelName) + { + if (panelParent == null) + { + Debug.LogWarning($"UnityEvo:parent为空,{panelName}自动设置为root节点下,请检查是否正确!!!!!"); + } + + if (this.activePanel != null) + { + return activePanel.gameObject; + } +#if HotUpdate + AssetHandle handle = null; + if (packageName == null) + { + handle = YooAssets.LoadAssetAsync(panelName); + } + else + { + var package = YooAssets.TryGetPackage(packageName); + if (package == null) + { + handle = YooAssets.LoadAssetAsync(panelName); + } + else + { + handle = package.LoadAssetAsync(panelName); + } + } + + await handle.Task; + + activePanel = GameObject.Instantiate(handle.AssetObject as GameObject, panelParent); +#else + GameObject handle = Resources.Load(panelName); + activePanel = GameObject.Instantiate(handle, panelParent); +#endif + + activePanel.name = this.GetType().Name; + + return activePanel; + } + + public void DestoryUI() + { + if (activePanel != null) + { + GameObject.Destroy(activePanel); + PanelSystem.Get_Dic().Remove(this.GetType().Name); + } + } + + public void SetPanelParent(Transform parent) + { + panelParent = parent; + } + + private void SetCanvasGroup(float alpha) + { + foreach (var spriteRenderer in spriteRendererDict) + { + Color c = spriteRenderer.Value.color; + c.a = alpha; + spriteRenderer.Value.color = c; + } + } + + private void SetCanvasGroupTween(float alpha, Action complete = null) + { + + // 创建一个新的序列 + Sequence sequence = DOTween.Sequence(); + + + foreach (var spriteRenderer in spriteRendererDict) + { + if (TweenType == UITweenType.None) + { + Color c = spriteRenderer.Value.color; + c.a = alpha; + spriteRenderer.Value.color = c; + } + else if (TweenType == UITweenType.Fade) + { + sequence.Join(spriteRenderer.Value.DOFade(alpha, 1f)); + } + else if (TweenType == UITweenType.Yoyo) + { + sequence.Join(spriteRenderer.Value.DOFade(alpha, 1f) + .SetLoops(-1, LoopType.Yoyo)); + } + } + + if (TweenType == UITweenType.None) + { + complete?.Invoke(); + } + else + { + sequence.OnComplete(() => complete?.Invoke()); + } + } + + public IArchitecture GetArchitecture() + { + return PanelSystem.GetArchitecture(); + } + + public enum UITweenType + { + /// + /// 无动画 + /// + None, + + /// + /// 淡入淡出 + /// + Fade, + + /// + /// 循环播放 + /// + Loop, + + /// + /// 往返播放 + /// + Yoyo, + } + } +} \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs.meta b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs.meta new file mode 100644 index 0000000..badf2d6 --- /dev/null +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BaseRenderPanel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ba0c8ac52d5440d8a07046b9dd2de8b1 +timeCreated: 1765527320 \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs index 3881a64..3146a6e 100644 --- a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs @@ -10,20 +10,19 @@ namespace Stary.Evo.UIFarme /// /// UI的入栈操作,此操作会显示一个面板 /// - Task PushQueue(Transform parent = null, string packageName = null) where T : IBasePanel, new(); + Task PushQueue(string panelName=null,Transform parent = null, string packageName = null) where T : IBasePanel, new(); /// /// UI的入栈操作,此操作会显示一个面板 /// - Task PushStack(Transform parent = null, string packageName = null) where T : IBasePanel, new(); + Task PushStack(string panelName=null,Transform parent = null, string packageName = null) where T : IBasePanel, new(); /// /// 执行面板的出栈操作,此操作会执行面板的OnExit方法 /// - void PopQueue(string panelName = null) where T : IBasePanel, new(); - - void PopQueue(T t, string panelName = null) where T : IBasePanel, new(); + void PopQueue(string panelName=null) where T : IBasePanel, new(); + void PopQueue(T t, string panelName=null) where T : IBasePanel, new(); /// /// 执行面板的出栈操作,此操作会执行面板的OnExit方法 /// @@ -104,38 +103,37 @@ namespace Stary.Evo.UIFarme /// /// 非热更模式传null /// - public async Task PushQueue(Transform parent = null, string packageName = null) + public async Task PushQueue(string panelName=null, Transform parent = null, string packageName = null) where T : IBasePanel, new() { - var prefabName = typeof(T).Name; - if (string.IsNullOrEmpty(prefabName)) + var prefabName = typeof(T).Name; + if (string.IsNullOrEmpty(panelName)) { - prefabName = typeof(T).Name; + panelName = typeof(T).Name; } - IBasePanel nextPanel = null; - if (!dicUI.ContainsKey(prefabName)) + if (!dicUI.ContainsKey(panelName)) { nextPanel = new T(); - nextPanel.UIName = prefabName; + nextPanel.UIName = panelName; await nextPanel.InitializeAsync(this); nextPanel.SetPanelParent(parent); - GameObject panelGo = await nextPanel.CreatePanel(packageName, prefabName); + GameObject panelGo = await nextPanel.CreatePanel($"Prefabs_{prefabName}", packageName); ///生成面板后,进行初始化操作 await nextPanel.InitializeAsync(panelGo); - dicUI.Add(prefabName, nextPanel); + dicUI.Add(panelName, nextPanel); } else { for (int i = 0; i < queuePanel.Count; i++) { - if (queuePanel[i].GetType().Name == prefabName) + if (queuePanel[i].GetType().Name == panelName) { return; } } - nextPanel = dicUI[prefabName]; + nextPanel = dicUI[panelName]; } queuePanel.Add(nextPanel); @@ -149,51 +147,49 @@ namespace Stary.Evo.UIFarme /// /// 非热更模式传null /// - public async Task PushStack(Transform parent = null, string packageName = null) where T : IBasePanel, new() + public async Task PushStack(string panelName=null,Transform parent = null, string packageName = null) where T : IBasePanel, new() { - var prefabName = typeof(T).Name; - if (string.IsNullOrEmpty(prefabName)) + var prefabName = typeof(T).Name; + if (string.IsNullOrEmpty(panelName)) { - prefabName = typeof(T).Name; + panelName = typeof(T).Name; } IBasePanel nextPanel = null; - if (!dicUI.ContainsKey(prefabName)) + if (!dicUI.ContainsKey(panelName)) { nextPanel = new T(); - nextPanel.UIName = prefabName; + nextPanel.UIName = panelName; await nextPanel.InitializeAsync(this); nextPanel.SetPanelParent(parent); - GameObject panelGo = await nextPanel.CreatePanel(packageName, prefabName); + GameObject panelGo = await nextPanel.CreatePanel($"Prefabs_{prefabName}", packageName); ///生成面板后,进行初始化操作 await nextPanel.InitializeAsync(panelGo); - dicUI.Add(prefabName, nextPanel); + dicUI.Add(panelName, nextPanel); } else { foreach (var panel in stackPanel) { - if (panel.GetType().Name == prefabName) + if (panel.GetType().Name == panelName) { return; } } - nextPanel = dicUI[prefabName]; + nextPanel = dicUI[panelName]; } - - if (stackPanel.Count > 0) + if(stackPanel.Count > 0) { stackPanel.Peek().OnExit(); } - stackPanel.Push(nextPanel); nextPanel.OnEnter(); } - public void PopQueue(string panelName = null) where T : IBasePanel, new() + public void PopQueue(string panelName=null) where T : IBasePanel, new() { if (string.IsNullOrEmpty(panelName)) { diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs new file mode 100644 index 0000000..eacb258 --- /dev/null +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs @@ -0,0 +1,235 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; + +namespace Stary.Evo.UIFarme +{ + public interface ISpriteRenderSystem : ISystem + { + /// + /// UI的入栈操作,此操作会显示一个面板 + /// + Task PushQueue(string packageName, string prefabName, Transform parent = null) + where T : IBaseRenderPanel, new(); + + /// + /// UI的入栈操作,此操作会显示一个面板 + /// + Task PushStack(Transform parent = null, string packageName = null) where T : IBaseRenderPanel, new(); + + /// + /// 执行面板的出栈操作,此操作会执行面板的OnExit方法 + /// + void PopStack(); + + /// + /// 执行面板的出栈操作,此操作会执行面板的OnExit方法 + /// + void PopQueue() where T : IBaseRenderPanel, new(); + + + /// + /// 面板全部出栈此操作会执行面板的OnExit方法 + /// + void PopAll(); + + + /// + /// 返回存储面板实例的字典 + /// + /// + Dictionary Get_Dic(); + + IBaseRenderPanel GetPanel(string PanelName); + } + + /// + /// 面板管理器,用栈来存储UI + /// + public class SpriteRendererSystem : AbstractSystem, ISpriteRenderSystem + { + /// + /// 存储普通UI面板 + /// + private List queuePanel; + + /// + /// 存储堆栈UI面板 + /// + private Stack stackPanel; + + /// + /// 存储所有UI信息的字典,每个UI信息都会对应一个GameObject + /// + private Dictionary dicUI; + + + protected override void OnInit() + { + stackPanel = new Stack(); + queuePanel = new List(); + dicUI = new Dictionary(); + } + + /// + /// UI的入栈操作,此操作会显示一个面板 + /// + /// + /// 非热更模式传null + /// + public async Task PushQueue(string packageName, string prefabName, Transform parent = null) + where T : IBaseRenderPanel, new() + { + IBaseRenderPanel nextPanel = null; + if (!dicUI.ContainsKey(prefabName)) + { + nextPanel = new T(); + nextPanel.UIName = prefabName; + await nextPanel.InitializeAsync(this); + nextPanel.SetPanelParent(parent); + GameObject panelGo = await nextPanel.CreatePanel(packageName, prefabName); + ///生成面板后,进行初始化操作 + await nextPanel.InitializeAsync(panelGo); + dicUI.Add(prefabName, nextPanel); + } + else + { + for (int i = 0; i < queuePanel.Count; i++) + { + if (queuePanel[i].GetType().Name == prefabName) + { + return; + } + } + + nextPanel = dicUI[prefabName]; + } + + queuePanel.Add(nextPanel); + nextPanel.OnEnter(); + //TOOD + } + + + /// + /// UI的入栈操作,此操作会显示一个面板 + /// + /// + /// 非热更模式传null + /// + public async Task PushStack(Transform parent = null, string packageName = null) + where T : IBaseRenderPanel, new() + { + var prefabName = typeof(T).Name; + if (string.IsNullOrEmpty(prefabName)) + { + prefabName = typeof(T).Name; + } + + IBaseRenderPanel nextPanel = null; + if (!dicUI.ContainsKey(prefabName)) + { + nextPanel = new T(); + nextPanel.UIName = prefabName; + await nextPanel.InitializeAsync(this); + nextPanel.SetPanelParent(parent); + GameObject panelGo = await nextPanel.CreatePanel(packageName, prefabName); + ///生成面板后,进行初始化操作 + await nextPanel.InitializeAsync(panelGo); + + dicUI.Add(prefabName, nextPanel); + } + else + { + foreach (var panel in stackPanel) + { + if (panel.GetType().Name == prefabName) + { + return; + } + } + + nextPanel = dicUI[prefabName]; + } + + if (stackPanel.Count > 0) + { + stackPanel.Peek().OnExit(); + } + + stackPanel.Push(nextPanel); + nextPanel.OnEnter(); + } + + + public void PopQueue() where T : IBaseRenderPanel, new() + { + string panelName = typeof(T).Name; + + + for (int i = 0; i < queuePanel.Count; i++) + { + if (queuePanel[i].GetType().Name == panelName) + { + queuePanel[i].OnExit(); + queuePanel.RemoveAt(i); + } + } + } + + public void PopStack() + { + if (stackPanel.Count > 0) + { + stackPanel.Pop().OnExit(); + } + + if (stackPanel.Count > 0) + { + stackPanel.Peek().OnEnter(); + } + } + + public void PopAll() + { + while (stackPanel.Count > 0) + stackPanel.Pop().OnExit(); + foreach (var panel in queuePanel) + { + panel.OnExit(); + } + + queuePanel.Clear(); + } + + + public Dictionary Get_Dic() + { + if (dicUI.Count > 0) + { + return dicUI; + } + + return null; + } + + public IBaseRenderPanel GetPanel(string PanelName) + { + if (dicUI.ContainsKey(PanelName)) + { + return dicUI[PanelName]; + } + + return null; + } + + public override void Dispose() + { + PopAll(); + stackPanel = null; + queuePanel = null; + dicUI = null; + } + } +} \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs.meta b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs.meta new file mode 100644 index 0000000..4b7a807 --- /dev/null +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/SpriteRendererSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6c8492e998a14a6f96e96902acbf587a +timeCreated: 1765527058 \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs b/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs index 6ade6ca..35ceb45 100644 --- a/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs +++ b/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs @@ -32,7 +32,6 @@ public class VideoPanel : BasePanel public override UITweenType TweenType => UITweenType.Fade; - public override UIInstantiateType UIType => UIInstantiateType.UINormal; public override void Initialize(GameObject panelGo) { diff --git a/Assets/00.StaryEvoTools/package.json b/Assets/00.StaryEvoTools/package.json index ae8d486..539e62f 100644 --- a/Assets/00.StaryEvoTools/package.json +++ b/Assets/00.StaryEvoTools/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.tools", - "version": "1.2.4", + "version": "1.2.5", "displayName": "00.StaryEvo.Tools", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3",