ViewManager.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.Events;
  4. namespace WS
  5. {
  6. [ObjectSystem]
  7. public class ViewManagerAwake : AwakeSystem<ViewManager>
  8. {
  9. public override void Awake(ViewManager self)
  10. {
  11. self.Awake();
  12. }
  13. }
  14. ///<summary>UI 管理</summary>
  15. public partial class ViewManager : WSComponent
  16. {
  17. ///<summary>View配置</summary>
  18. private List<ResourcePath> Config;
  19. ///<summary>Canvas</summary>
  20. private Dictionary<ViewShowModeType, ViewCanvas> _Canvas =
  21. new Dictionary<ViewShowModeType, ViewCanvas>();
  22. ///<summary>标准分辨率值</summary>
  23. public float StandardScreen;
  24. ///<summary>当前分辨率值</summary>
  25. public float CurrStandardScreen;
  26. public void Awake()
  27. {
  28. StandardScreen = 1920.0f / 1080.0f;
  29. CurrStandardScreen = Screen.width / (float)Screen.height;
  30. GameObject init = GameObject.Find("Init");
  31. Transform scene = init.transform.Find("UI/SceneCanvas");
  32. ViewCanvas canvass = ComponentFactory.CreateWithParent<
  33. ViewCanvas,
  34. Transform,
  35. ViewShowModeType
  36. >(this, scene, ViewShowModeType.Screen);
  37. _Canvas[ViewShowModeType.Screen] = canvass;
  38. scene = init.transform.Find("UI/WorldCanvas");
  39. canvass = ComponentFactory.CreateWithParent<ViewCanvas, Transform, ViewShowModeType>(
  40. this,
  41. scene,
  42. ViewShowModeType.World
  43. );
  44. _Canvas[ViewShowModeType.World] = canvass;
  45. Config = ConfigHelper.LoadConfig<List<ResourcePath>>("Config/Framework/ViewConfig");
  46. StartType();
  47. }
  48. ///<summary>创建ViewCanvas</summary>
  49. public void CreateViewCanvas(ViewShowModeType viewshow, Transform root)
  50. {
  51. ViewCanvas canvas = ComponentFactory.CreateWithParent<
  52. ViewCanvas,
  53. Transform,
  54. ViewShowModeType
  55. >(this, root, viewshow);
  56. _Canvas[viewshow] = canvas;
  57. }
  58. ///<summary>获取ViewCanvas</summary>
  59. public ViewCanvas GetViewCanvas(ViewShowModeType viewshow)
  60. {
  61. if (_Canvas.ContainsKey(viewshow))
  62. {
  63. return _Canvas[viewshow];
  64. }
  65. return null;
  66. }
  67. ///<summary>移除ViewCanvas</summary>
  68. public void RemoveViewCanvas(ViewShowModeType viewshow)
  69. {
  70. ViewCanvas canvas = _Canvas[viewshow];
  71. _Canvas.Remove(viewshow);
  72. canvas.Dispose();
  73. }
  74. /// <summary>打开窗口</summary>
  75. public V OpenView<V>(UnityAction opencallback = null)
  76. where V : View
  77. {
  78. return CreateView<V>(ViewShowModeType.Default, null, opencallback);
  79. }
  80. /// <summary>打开窗口</summary>
  81. /// <param name="showmode">显示Canvas类型</param>
  82. /// <param name="clone">克隆体名称</param>
  83. public V OpenView<V>(string clone, UnityAction opencallback = null)
  84. where V : View
  85. {
  86. return CreateView<V>(ViewShowModeType.Default, clone, opencallback);
  87. }
  88. /// <summary>打开窗口</summary>
  89. public V OpenView<V>(ViewShowModeType showmode, UnityAction opencallback = null)
  90. where V : View
  91. {
  92. return CreateView<V>(showmode, null, opencallback);
  93. }
  94. /// <summary>打开窗口</summary>
  95. /// <param name="showmode">显示Canvas类型</param>
  96. /// <param name="clone">克隆体名称</param>
  97. public V OpenView<V>(
  98. ViewShowModeType showmode,
  99. string clone,
  100. UnityAction opencallback = null
  101. )
  102. where V : View
  103. {
  104. return CreateView<V>(showmode, clone, opencallback);
  105. }
  106. ///<summary>创建View</summary>
  107. private V CreateView<V>(
  108. ViewShowModeType showmode = ViewShowModeType.Default,
  109. string clone = null,
  110. UnityAction opencallback = null
  111. )
  112. where V : View
  113. {
  114. string uiprefab = GetToName(typeof(V));
  115. ResourcePath pathdata = null;
  116. if (string.IsNullOrEmpty(clone))
  117. pathdata = Config.Find(v => v.Name == uiprefab);
  118. else
  119. pathdata = Config.Find(v => v.Name == clone);
  120. GameObject obj = GameObject.Instantiate(Resources.Load<GameObject>(pathdata.Path));
  121. V view = ComponentFactory.Create<V>();
  122. view.UIGameObject = obj;
  123. view.LoadInit();
  124. if (showmode == ViewShowModeType.Default)
  125. {
  126. _Canvas[view.ShowModeType].ShowCanvas(view);
  127. }
  128. else
  129. {
  130. _Canvas[showmode].ShowCanvas(view);
  131. view.ShowModeType = showmode;
  132. }
  133. view.SetPosition();
  134. Animation component = view.UIGameObject.GetComponent<Animation>();
  135. if (component != null)
  136. {
  137. view.AnimComponent = view.AddComponent<AnimationComponent, Animation>(component);
  138. view.AnimComponent.PlayAnim(
  139. "open",
  140. () =>
  141. {
  142. view.OnOpen();
  143. opencallback?.Invoke();
  144. view.ShowType = ViewShowType.Open;
  145. }
  146. );
  147. }
  148. else
  149. {
  150. view.OnOpen();
  151. opencallback?.Invoke();
  152. view.ShowType = ViewShowType.Open;
  153. }
  154. VoiceManager.Instance.Play(VoiceType.Effects, "ui-open-1");
  155. return view;
  156. }
  157. /// <summary>关闭窗口</summary>
  158. public void CloseView(View view, UnityAction closecallback)
  159. {
  160. if (view != null)
  161. {
  162. if (view.AnimComponent != null)
  163. {
  164. view.AnimComponent.PlayAnim(
  165. "close",
  166. () =>
  167. {
  168. closecallback?.Invoke();
  169. CloseSet(view);
  170. }
  171. );
  172. }
  173. else
  174. {
  175. CloseSet(view);
  176. }
  177. }
  178. }
  179. ///<summary>关闭设置</summary>
  180. private static void CloseSet(View view)
  181. {
  182. if (view.ShowModeType != ViewShowModeType.Screen)
  183. {
  184. #if PLATFORM_PICO
  185. GamePoolManager.Instance.Recovery(view.UIGameObject.transform.parent.gameObject);
  186. #endif
  187. }
  188. UnityEngine.Object.Destroy(view.UIGameObject);
  189. view.Dispose();
  190. }
  191. public override void Dispose()
  192. {
  193. base.Dispose();
  194. foreach (var item in _Canvas)
  195. {
  196. item.Value.Dispose();
  197. }
  198. _Canvas.Clear();
  199. }
  200. }
  201. }