diff --git a/UnityGame/Assets/Scripts/GameLogic/Tools/AssetBundle/AssetBundleManager.cs b/UnityGame/Assets/Scripts/GameLogic/Tools/AssetBundle/AssetBundleManager.cs index d771b16..90bd5a0 100644 --- a/UnityGame/Assets/Scripts/GameLogic/Tools/AssetBundle/AssetBundleManager.cs +++ b/UnityGame/Assets/Scripts/GameLogic/Tools/AssetBundle/AssetBundleManager.cs @@ -10,6 +10,12 @@ namespace CreatGame.AssetBundle { public class AssetBundleManager : Singleton { + private class AssetBundleData + { + public string assetBundleName; + public GameObject assetBundle; + } + private Dictionary assetBundles; /// /// 是否初始化完成 /// @@ -20,6 +26,7 @@ namespace CreatGame.AssetBundle public AssetBundleManager() { IsInitializeAsync = false; + assetBundles = new Dictionary(); Addressables.InitializeAsync(); } @@ -67,11 +74,18 @@ namespace CreatGame.AssetBundle public void LoadGameObject(string assetBundleName, Action callback) { + if (assetBundles.TryGetValue(assetBundleName, out var bundle)) + { + callback.Invoke(GameObject.Instantiate(bundle.assetBundle)); + return; + } + Addressables.LoadAssetAsync(assetBundleName).Completed += (handle) => { if (handle.Status == AsyncOperationStatus.Succeeded) { var asset = handle.Result; + assetBundles.Add(assetBundleName, new AssetBundleData { assetBundleName = assetBundleName, assetBundle = asset }); callback?.Invoke(GameObject.Instantiate(asset)); } else diff --git a/UnityGame/Assets/Scripts/GameLogic/UI/UIManager.cs b/UnityGame/Assets/Scripts/GameLogic/UI/UIManager.cs index b1483c6..b7faf4d 100644 --- a/UnityGame/Assets/Scripts/GameLogic/UI/UIManager.cs +++ b/UnityGame/Assets/Scripts/GameLogic/UI/UIManager.cs @@ -33,7 +33,7 @@ namespace CreatGame.UI foreach (var layer in Enum.GetValues(typeof(UILayer))) { - var layerObj = new GameObject(Enum.GetName(typeof(UILayer), layer)); + var layerObj = m_UIRoot.transform.Find(Enum.GetName(typeof(UILayer), layer)).gameObject; layerObj.transform.SetParent(m_UIRoot.transform); layerObj.transform.localScale = Vector3.one; layerObj.transform.localPosition = Vector3.zero; @@ -68,8 +68,28 @@ namespace CreatGame.UI obj.transform.localScale = Vector3.one; } view.InitView(); + + if (m_Windows.ContainsKey(layer) == false) + { + m_Windows.Add(layer, new Queue()); + } + + m_Windows[layer].Enqueue(view); }); + return view; } + /// + /// + /// + /// + public void CloseView(UILayer layer) + { + if (m_Windows.ContainsKey(layer)) + { + var view = m_Windows[layer].Dequeue(); + view.CloseView(); + } + } } } \ No newline at end of file diff --git a/UnityGame/Assets/Scripts/GameLogic/UI/UIViewBase.cs b/UnityGame/Assets/Scripts/GameLogic/UI/UIViewBase.cs index 6ee90c0..02064e6 100644 --- a/UnityGame/Assets/Scripts/GameLogic/UI/UIViewBase.cs +++ b/UnityGame/Assets/Scripts/GameLogic/UI/UIViewBase.cs @@ -42,7 +42,7 @@ namespace CreatGame.UI /// public virtual void CloseView() { - + GameObject.Destroy(m_ViewObject); } protected GameObject GetGameObject(string name)