IEnumerator AsyncShow(Action callback) { //1:Instance UI //FIX:support this is manager multi gameObject,instance by your self. if (this.gameObject == null && string.IsNullOrEmpty(uiPath) == false) { GameObject go = null; bool _loading = true; PageMgr.delegateAsyncLoadUI(uiPath, (o) => { go = o != null ? GameObject.Instantiate(o) as GameObject : null; AnchorUIGameObject(go); Awake(go); isAsyncUI = true; _loading = false; //:animation active. Active(); //:refresh ui component. Refresh(); //:popup this node to top if need back. PageMgr.PopNode(this); if (callback != null) { callback(); } }); float _t0 = Time.realtimeSinceStartup; while (_loading) { if (Time.realtimeSinceStartup - _t0 >= 10.0f) { Debugger.LogError("[UI] WTF async load your ui prefab timeout!"); yield break; } yield return(null); } } else { //:animation active. Active(); //:refresh ui component. Refresh(); //:popup this node to top if need back. PageMgr.PopNode(this); if (callback != null) { callback(); } } }