using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace WS { [ObjectSystem] public class ViewManagerAwake : AwakeSystem { public override void Awake(ViewManager self) { self.Awake(); } } ///UI 管理 public partial class ViewManager : WSComponent { ///View配置 private List Config; ///Canvas private Dictionary _Canvas = new Dictionary(); ///标准分辨率值 public float StandardScreen; ///当前分辨率值 public float CurrStandardScreen; public void Awake() { StandardScreen = 1920.0f / 1080.0f; CurrStandardScreen = Screen.width / (float)Screen.height; GameObject init = GameObject.Find("Init"); Transform scene = init.transform.Find("UI/SceneCanvas"); ViewCanvas canvass = ComponentFactory.CreateWithParent< ViewCanvas, Transform, ViewShowModeType >(this, scene, ViewShowModeType.Screen); _Canvas[ViewShowModeType.Screen] = canvass; scene = init.transform.Find("UI/WorldCanvas"); canvass = ComponentFactory.CreateWithParent( this, scene, ViewShowModeType.World ); _Canvas[ViewShowModeType.World] = canvass; Config = ConfigHelper.LoadConfig>("Config/Framework/ViewConfig"); StartType(); } ///创建ViewCanvas public void CreateViewCanvas(ViewShowModeType viewshow, Transform root) { ViewCanvas canvas = ComponentFactory.CreateWithParent< ViewCanvas, Transform, ViewShowModeType >(this, root, viewshow); _Canvas[viewshow] = canvas; } ///获取ViewCanvas public ViewCanvas GetViewCanvas(ViewShowModeType viewshow) { if (_Canvas.ContainsKey(viewshow)) { return _Canvas[viewshow]; } return null; } ///移除ViewCanvas public void RemoveViewCanvas(ViewShowModeType viewshow) { ViewCanvas canvas = _Canvas[viewshow]; _Canvas.Remove(viewshow); canvas.Dispose(); } /// 打开窗口 public V OpenView(UnityAction opencallback = null) where V : View { return CreateView(ViewShowModeType.Default, null, opencallback); } /// 打开窗口 /// 显示Canvas类型 /// 克隆体名称 public V OpenView(string clone, UnityAction opencallback = null) where V : View { return CreateView(ViewShowModeType.Default, clone, opencallback); } /// 打开窗口 public V OpenView(ViewShowModeType showmode, UnityAction opencallback = null) where V : View { return CreateView(showmode, null, opencallback); } /// 打开窗口 /// 显示Canvas类型 /// 克隆体名称 public V OpenView( ViewShowModeType showmode, string clone, UnityAction opencallback = null ) where V : View { return CreateView(showmode, clone, opencallback); } ///创建View private V CreateView( ViewShowModeType showmode = ViewShowModeType.Default, string clone = null, UnityAction opencallback = null ) where V : View { string uiprefab = GetToName(typeof(V)); ResourcePath pathdata = null; if (string.IsNullOrEmpty(clone)) pathdata = Config.Find(v => v.Name == uiprefab); else pathdata = Config.Find(v => v.Name == clone); GameObject obj = GameObject.Instantiate(Resources.Load(pathdata.Path)); V view = ComponentFactory.Create(); view.UIGameObject = obj; view.LoadInit(); if (showmode == ViewShowModeType.Default) { _Canvas[view.ShowModeType].ShowCanvas(view); } else { _Canvas[showmode].ShowCanvas(view); view.ShowModeType = showmode; } view.SetPosition(); Animation component = view.UIGameObject.GetComponent(); if (component != null) { view.AnimComponent = view.AddComponent(component); view.AnimComponent.PlayAnim( "open", () => { view.OnOpen(); opencallback?.Invoke(); view.ShowType = ViewShowType.Open; } ); } else { view.OnOpen(); opencallback?.Invoke(); view.ShowType = ViewShowType.Open; } VoiceManager.Instance.Play(VoiceType.Effects, "ui-open-1"); return view; } /// 关闭窗口 public void CloseView(View view, UnityAction closecallback) { if (view != null) { if (view.AnimComponent != null) { view.AnimComponent.PlayAnim( "close", () => { closecallback?.Invoke(); CloseSet(view); } ); } else { CloseSet(view); } } } ///关闭设置 private static void CloseSet(View view) { if (view.ShowModeType != ViewShowModeType.Screen) { #if PLATFORM_PICO GamePoolManager.Instance.Recovery(view.UIGameObject.transform.parent.gameObject); #endif } UnityEngine.Object.Destroy(view.UIGameObject); view.Dispose(); } public override void Dispose() { base.Dispose(); foreach (var item in _Canvas) { item.Value.Dispose(); } _Canvas.Clear(); } } }