From 7fb5fa6850ea7f650bb17b2be15c97c9aba1e419 Mon Sep 17 00:00:00 2001 From: zhangzheng Date: Fri, 12 Dec 2025 15:58:37 +0800 Subject: [PATCH] 111 --- .../Tools/PanelSystem/Base/BasePanel.cs | 204 +++++++++++------- .../Tools/PanelSystem/Manager/PanelSystem.cs | 56 ++--- .../Runtime/VideoSystemPanel/VideoPanel.cs | 1 + Assets/00.StaryEvoTools/package.json | 2 +- 4 files changed, 153 insertions(+), 110 deletions(-) diff --git a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs index 39f1e33..9e125af 100644 --- a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Base/BasePanel.cs @@ -21,34 +21,29 @@ 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退出时执行的操作,只会执行一次 @@ -63,7 +58,7 @@ namespace Stary.Evo.UIFarme /// /// ui信息 /// - Task CreatePanel(string panelName, string packageName); + Task CreatePanel(string packageName, string panelName); /// /// 销毁一个Ui对象 @@ -86,6 +81,8 @@ namespace Stary.Evo.UIFarme public abstract UITweenType TweenType { get; } + public abstract UIInstantiateType UIType { get; } + /// /// 面板管理器 /// @@ -97,31 +94,44 @@ 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; - Selectable[] selectables = activePanel.GetComponentsInChildren(true); - foreach (Selectable item in selectables) + if (UIType == UIInstantiateType.SpriteNormal) { - selectableDict[item.name] = item; + 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; } - canvasGroup = UITool.GetOrAddComponent(activePanel); - canvasGroup.alpha = 0f; + } public virtual Task InitializeAsync(GameObject panelGo) @@ -145,43 +155,15 @@ namespace Stary.Evo.UIFarme public virtual void OnEnter(Action complete = null) { activePanel.SetActive(true); - canvasGroup.blocksRaycasts = true; - if (TweenType == UITweenType.None) - { - canvasGroup.alpha = 1f; - } - 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(); }); - } + + SetCanvasGroupTween(1f, complete); } - public virtual void OnPause() - { - canvasGroup.blocksRaycasts = false; - } - - public virtual void OnResume() - { - canvasGroup.blocksRaycasts = true; - } public virtual void OnExit(float delay = 0f) { - canvasGroup.DOFade(0f, delay).OnComplete(() => - { - activePanel.SetActive(false); - canvasGroup.blocksRaycasts = false; - }); + SetCanvasGroupTween(0f, () => { activePanel.SetActive(false); }); } public virtual void OnDestroy() @@ -190,7 +172,7 @@ namespace Stary.Evo.UIFarme } - public async Task CreatePanel(string panelName, string packageName) + public async Task CreatePanel(string packageName, string panelName) { if (panelParent == null) { @@ -202,25 +184,9 @@ namespace Stary.Evo.UIFarme 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; + var prefab = await AMP.ResourceLoader.LoadAssetAsync(packageName, panelName); activePanel = GameObject.Instantiate(handle.AssetObject as GameObject, panelParent); #else @@ -229,14 +195,15 @@ 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; } @@ -255,21 +222,79 @@ namespace Stary.Evo.UIFarme panelParent = parent; } - /// - /// 获取组件:Button,Toggle,Slider,InputField,Dropdown,ScroolBar - /// - /// - /// - /// - protected T GetComp(string name) where T : Selectable + private void SetCanvasGroup(float alpha) { - selectableDict.TryGetValue(name, out Selectable t); - if (t == null) + foreach (var spriteRenderer in spriteRendererDict) { - Debug.LogError($"{this.GetType()}---{name}:在selectableDict不存在"); + Color c = spriteRenderer.Value.color; + c.a = alpha; + spriteRenderer.Value.color = c; } + } - return t as T; + 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(); }); + } + } } public IArchitecture GetArchitecture() @@ -299,5 +324,18 @@ 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/Manager/PanelSystem.cs b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs index 3146a6e..3881a64 100644 --- a/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs +++ b/Assets/00.StaryEvoTools/Runtime/Tools/PanelSystem/Manager/PanelSystem.cs @@ -10,19 +10,20 @@ namespace Stary.Evo.UIFarme /// /// UI的入栈操作,此操作会显示一个面板 /// - Task PushQueue(string panelName=null,Transform parent = null, string packageName = null) where T : IBasePanel, new(); + Task PushQueue(Transform parent = null, string packageName = null) where T : IBasePanel, new(); /// /// UI的入栈操作,此操作会显示一个面板 /// - Task PushStack(string panelName=null,Transform parent = null, string packageName = null) where T : IBasePanel, new(); + Task PushStack(Transform parent = null, string packageName = null) where T : IBasePanel, new(); /// /// 执行面板的出栈操作,此操作会执行面板的OnExit方法 /// - void PopQueue(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(); - void PopQueue(T t, string panelName=null) where T : IBasePanel, new(); /// /// 执行面板的出栈操作,此操作会执行面板的OnExit方法 /// @@ -103,37 +104,38 @@ namespace Stary.Evo.UIFarme /// /// 非热更模式传null /// - public async Task PushQueue(string panelName=null, Transform parent = null, string packageName = null) + public async Task PushQueue(Transform parent = null, string packageName = null) where T : IBasePanel, new() { - var prefabName = typeof(T).Name; - if (string.IsNullOrEmpty(panelName)) + var prefabName = typeof(T).Name; + if (string.IsNullOrEmpty(prefabName)) { - panelName = typeof(T).Name; + prefabName = typeof(T).Name; } + IBasePanel nextPanel = null; - if (!dicUI.ContainsKey(panelName)) + if (!dicUI.ContainsKey(prefabName)) { nextPanel = new T(); - nextPanel.UIName = panelName; + nextPanel.UIName = prefabName; await nextPanel.InitializeAsync(this); nextPanel.SetPanelParent(parent); - GameObject panelGo = await nextPanel.CreatePanel($"Prefabs_{prefabName}", packageName); + GameObject panelGo = await nextPanel.CreatePanel(packageName, prefabName); ///生成面板后,进行初始化操作 await nextPanel.InitializeAsync(panelGo); - dicUI.Add(panelName, nextPanel); + dicUI.Add(prefabName, nextPanel); } else { for (int i = 0; i < queuePanel.Count; i++) { - if (queuePanel[i].GetType().Name == panelName) + if (queuePanel[i].GetType().Name == prefabName) { return; } } - nextPanel = dicUI[panelName]; + nextPanel = dicUI[prefabName]; } queuePanel.Add(nextPanel); @@ -147,49 +149,51 @@ namespace Stary.Evo.UIFarme /// /// 非热更模式传null /// - public async Task PushStack(string panelName=null,Transform parent = null, string packageName = null) where T : IBasePanel, new() + public async Task PushStack(Transform parent = null, string packageName = null) where T : IBasePanel, new() { - var prefabName = typeof(T).Name; - if (string.IsNullOrEmpty(panelName)) + var prefabName = typeof(T).Name; + if (string.IsNullOrEmpty(prefabName)) { - panelName = typeof(T).Name; + prefabName = typeof(T).Name; } IBasePanel nextPanel = null; - if (!dicUI.ContainsKey(panelName)) + if (!dicUI.ContainsKey(prefabName)) { nextPanel = new T(); - nextPanel.UIName = panelName; + nextPanel.UIName = prefabName; await nextPanel.InitializeAsync(this); nextPanel.SetPanelParent(parent); - GameObject panelGo = await nextPanel.CreatePanel($"Prefabs_{prefabName}", packageName); + GameObject panelGo = await nextPanel.CreatePanel(packageName, prefabName); ///生成面板后,进行初始化操作 await nextPanel.InitializeAsync(panelGo); - dicUI.Add(panelName, nextPanel); + dicUI.Add(prefabName, nextPanel); } else { foreach (var panel in stackPanel) { - if (panel.GetType().Name == panelName) + if (panel.GetType().Name == prefabName) { return; } } - nextPanel = dicUI[panelName]; + nextPanel = dicUI[prefabName]; } - 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/VideoSystemPanel/VideoPanel.cs b/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs index 35ceb45..6ade6ca 100644 --- a/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs +++ b/Assets/00.StaryEvoTools/Runtime/VideoSystemPanel/VideoPanel.cs @@ -32,6 +32,7 @@ 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 2ce47e8..acfcfcd 100644 --- a/Assets/00.StaryEvoTools/package.json +++ b/Assets/00.StaryEvoTools/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.tools", - "version": "1.2.2", + "version": "1.2.3", "displayName": "00.StaryEvo.Tools", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3",