private void HideInternal(string name, DialogTransitionDelegate onComplete, bool Remove) { //Debug.Log("==> Hide" + name + " " + Time.time); if (!_dialogs.ContainsKey(name) || !_canvases[_dialogs[name]].Dialogs.ContainsKey(name)) { HandleHideFail(name, onComplete); return; } DialogController dc = null; _canvases[_dialogs[name]].Dialogs.TryGetValue(name, out dc); if (dc == null) { HandleHideFail(name, onComplete); return; } if (dc.IsEntering) // If in the process of entering, Hide when done. { Debug.LogWarning("Cannot hide " + name + " yet, Entered() has not been called!"); dc.EnterCompleteActions.Add((bool s) => { dc.IsEntering = false; Hide(name, onComplete); }); return; } if (dc.IsExiting) { Debug.LogWarning("Dialog " + name + " is already exiting"); dc.ExitCompleteActions.Add(onComplete); return; } if (dc.IsExited) { Debug.Log("Dialog " + name + " is already inactive"); if (Remove) { dc.Terminate(); } if (onComplete != null) { onComplete(false); } return; } if (Remove) { //Managers.AssetBundleHelperManager.UnloadAssetFromMap<GameObject>(name); _loadedDialogs.Remove(name); } dc.ExitCompleteActions.Add(onComplete); dc.BaseExit(Remove); }