public static T FindOrCreateGuiState <T>() where T : GuiState { GuiState guiState = (GuiState)Object.FindObjectOfType(typeof(T)); if (guiState == null) { StateManager stateManager = GameAccesPoint.Instance.managerSystem.stateManager; if (stateManager != null) { foreach (GuiState state in stateManager.guiStates) { if (state is T) { guiState = state; } } } } if (guiState == null) { GuiState prefab = (GuiState)Resources.Load(guiPrefabsPath + "/" + typeof(T).Name, typeof(GuiState)); if (prefab != null) { guiState = (GuiState)Object.Instantiate(prefab); guiState.Initialize(); } } return((T)System.Convert.ChangeType(guiState, typeof(T))); }