public void CacheUI(string uiPath) { if (cacheUIs.ContainsKey(uiPath)) { return; } cacheUIs.Add(uiPath, new CacheUI(uiPath, null, false)); ResourceManager.Instance.LoadAssetAsync( uiPath, (Object obj) => { if (obj == null) { Debug.LogError(string.Format("cache UI failed: {0}", uiPath)); } GameObject instance = GameObject.Instantiate(obj) as GameObject; instance.transform.SetParent(cacheRoot, false); CacheUI cacheUI = cacheUIs[uiPath]; if (cacheUI == null) { cacheUIs[uiPath] = new CacheUI(uiPath, instance, true); } else { cacheUI.gameObject = instance; cacheUI.isLoaded = true; } }); }
private IEnumerator LoadUI(Window window, bool isAsync = false) { GameObject uiGameObject = null; if (cacheUIs.ContainsKey(window.uiPath))//如果UI已缓存,等待UI加载完毕 { CacheUI cacheUI = cacheUIs[window.uiPath]; float startTime = Time.realtimeSinceStartup; while (!cacheUI.isLoaded) { loadingTipUI.SetActive(true); yield return(null); if (Time.realtimeSinceStartup - startTime > loadUIExpireTime) { window.error = string.Format("wait for cache ui load time expire : {0}", cacheUI.path); loadingTipUI.SetActive(false); yield break; } } loadingTipUI.SetActive(false); uiGameObject = cacheUI.gameObject; cacheUIs.Remove(window.uiPath); } else if (isAsync) { yield return(StartCoroutine(ResourceManager.Instance._LoadAssetAsync(window.uiPath, (Object obj) => { uiGameObject = GameObject.Instantiate(obj) as GameObject; }))); } else { uiGameObject = GameObject.Instantiate(ResourceManager.Instance.LoadAsset(window.uiPath)) as GameObject; } if (uiGameObject == null) { window.error = string.Format("load ui failed : {0}", window.uiPath); yield break; } AnchorUIGameObject(uiGameObject, window.type); window.uiGameObject = uiGameObject; window.uiTransform = uiGameObject.transform; }