| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- using JCUnityLib;
- public class ViewMgr : ViewManager<ViewMgr>
- {
- protected override void OnInited()
- {
- //设置视图组
- SetViewGroup<HomeFrameView>(1);
- //场景监听
- SceneManager.sceneLoaded += (scene, mode) => {
- if (scene.name == "Home") {
- ResumeViews(dontDestroyViews);
- }
- };
- SceneManager.sceneUnloaded += (scene) => {
- if (scene.name == "Home") {
- DestroyAllViewsExcludeDontDestroy();
- HideViews(dontDestroyViews);
- }
- };
- }
- //以下名称的预制体通过SceneResourceManager获取
- HashSet<string> scenePrefabs = new HashSet<string>(new string[] {
- //Home
- "TopBarView", "HomeView", "GameStartView", "ChallengeOptionView",
- "PKGameOptionView", "PKMatchView", "RoleSelectView"
- });
- protected override GameObject LoadViewPrefab(string viewName)
- {
- if (scenePrefabs.Contains(viewName)) return SceneResourceManager.Instance.GetPrefab(viewName);
- return base.LoadViewPrefab("Home/" + viewName);
- }
- //以下名称的界面不会随场景销毁而销毁
- HashSet<string> dontDestroyViews = new HashSet<string>(new string[] {
- //Home
- "GameStartView", "ChallengeOptionView", "RoleSelectView", "PKGameOptionView", "PKMatchView"
- });
- protected override void ShowView(ViewBase viewBase, object[] args)
- {
- base.ShowView(viewBase, args);
- string viewName = viewBase.GetType().Name;
- //主要是为了删除名称中的(Clone)
- viewBase.gameObject.name = viewName;
- //某些界面设置为不销毁
- if (dontDestroyViews.Contains(viewName)) viewBase.dontDestroy = true;
- //旧版ui适配新ui框架
- RectTransform rectTransform = (RectTransform) viewBase.transform;
- rectTransform.anchorMin = Vector2.zero;
- rectTransform.anchorMax = Vector2.one;
- rectTransform.pivot = Vector2.one / 2;
- rectTransform.localScale = Vector3.one;
- var canvasScaler = rectTransform.GetComponent<UnityEngine.UI.CanvasScaler>();
- if (canvasScaler) Destroy(canvasScaler);
- //特殊处理
- if (viewName == "HomeView") rectTransform.SetSiblingIndex(0);
- }
- public void ResumeViews(IEnumerable<string> viewNames, params object[] args)
- {
- foreach (var viewName in viewNames)
- {
- ViewBase viewBase;
- if (viewDict.TryGetValue(viewName, out viewBase)) {
- ShowView(viewBase, args);
- }
- }
- }
- public void HideViews(IEnumerable<string> viewNames, params object[] args)
- {
- foreach (var viewName in viewNames)
- {
- ViewBase viewBase;
- if (viewDict.TryGetValue(viewName, out viewBase)) {
- HideView(viewBase, false, args);
- }
- }
- }
- }
|