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)));
    }