public T ShowPopup <T>(string screenName, string data = null, Action <object> positive = null, Action <object> negative = null) where T : UIPopup { if (!mListScreen.ContainsKey(screenName)) { throw new KeyNotFoundException("ScreenManager: Show failed. Screen with name '" + screenName + "' does not exist."); } GameObject newDupeScreen = GameObject.Instantiate(mListScreen[screenName].gameObject); newDupeScreen.transform.SetParent(transform, false); UIPopup popup = newDupeScreen.GetComponent <UIPopup>(); popup.Initialize(this, true); popup.SetData(data); popup.SetCallback(positive, negative); newDupeScreen.name = screenName + " (" + (popup.ID) + ")"; return(ShowScreen(popup, true) as T); }