Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

UI y su organización, menús dentro de menús por ejemplo.

Iniciado por Er_TaloN, Enero 23, 2017, 09:31:01 AM

Tema anterior - Siguiente tema
Hola, este tema es más que nada para ver como os organizáis los menús.
 
Me explico, estoy con una app que tiene menús dentro de menús, algo así como un menú principal que usar botones abres otros y otros, varios niveles de submenus.
 
Cuando hay solo un nivel, no me complico la vida, pongo en menú en la escena principal y cuando das al botón START, pues lo oculto con un canvas group(creo que se llama), y listo, pero cuando hay muchos menús me parece un coñazo.
 
Quería saber como os organizáis vosotros, si hacéis distintas escenas por cada menú distinto o tenéis algún otro sistema.
 
Saludos y gracias!.

Enero 23, 2017, 10:02:56 AM #1 Ultima modificación: Enero 23, 2017, 10:04:56 AM por lightbug
Hola, en mi caso lo que hago es tener un canvas padre, con menus dentro (simples objetos vacios con un rectTransform solamente) y dentro de cada uno de estos los elementos UI (botones comunmente):
 
Algo asi:
 

 
El MainMenuCanvas tiene un script que lo que hace basicamente es llevar cuenta de que menu (hijos) esta activo actualmente y mostrarlo (obvio dejando a los demas ocultos) y ademas tiene metodos publicos para que se pueda acceder al script en cada evento de cada boton.
 
Yo no lo pienso como menu de menu, sino que todos los menus aparecen hijos, esta en vos decir que si del menu indice 0 (mainMenu en la imagen) se va al menu del indice 2 (profileMenu en la imagen), por ejemplo.
 
El script basicamente es algo asi (partes importantes):
 

   private int currentMenuIndex = 0;   
private List<GameObject> menuList = new List<GameObject> ();
void Awake()
{
         //menus deben estar activados inicialmente
   for(int i = 0 ; i < transform.childCount ; i++ )
   {         
      menuList.Add( transform.GetChild(i).gameObject ) ;
      if (i != 0)
         menuList .SetActive (false);
   }      
}


public void GoToMenu(int targetIndex)
{
   menuList [currentMenuIndex].SetActive (false);
   menuList [targetIndex].SetActive (true);
   currentMenuIndex = targetIndex;
}
public void GoToScene(int index)
{
   StartCoroutine( GameManager.GetInstance.sceneManager.LoadSceneByIndexCoroutine(index) );
}
public void GoToMainMenu()
{
   StartCoroutine( GameManager.GetInstance.sceneManager.LoadSceneByIndexCoroutine(0) );
   GameManager.GetInstance.gameStateManager.state = GameStateManager.GameState.menu;
}
public void ExitGame()
{
   Application.Quit ();
}
public void CreateOrLoadGame(int profile)
{
   GameManager.GetInstance.currentProfile = profile;
   GameManager.GetInstance.CreateOrLoadGame();
}
 
}

 
Hasta ahora este metodo me ha funcionado a la perfeccion.
 
Saludos

Gracias por la respuesta, más o menos como yo, solo que yo en cada sub menú, tengo un componente CanvasGroup. 
 

   private void HiddenPanel(CanvasGroup panel)
    {
        panel.alpha = 0;
        panel.blocksRaycasts = false;
        panel.interactable = false;
    }
    private void UnHiddenPanel(CanvasGroup panel)
    {
        panel.alpha = 1;
        panel.blocksRaycasts = true;
        panel.interactable = true;
    }

 
Y luego con estos métodos, se activas y los desactivas. 
 
Pero claro cuando hay muchos, a veces me vuelvo loco, porque tienes que desactivar, creo que haré un sistema que desactive todos y active el menú que yo le pase.
 
Saludos y gracias!
 
 

claro, por eso tenia esto yo:
 

menuList [currentMenuIndex].SetActive (false);
menuList [targetIndex].SetActive (true);
currentMenuIndex = targetIndex;

 
te olvidás de la cantidad que haya
 
Saludos

Gracias compañero, te debo una! :D 
 
 
 
Saludos!
 
Gracias compañero, te debo una! :D 
 
 
 
Saludos!

Etiquetas: