Domina la conexión entre interfaz y lógica en Unity con un flujo claro: activar el botón play, ocultar o mostrar el canvas con un MenuManager tipo singleton, y salir con seguridad usando compilación condicional. Verás cómo aprovechar OnClick del Button, Canvas.enabled y las recomendaciones de Unity para distintas plataformas.
¿Cómo conectar el botón play con el GameManager usando onclick?
Configura el inicio de partida desde la UI sin tocar el teclado. La meta: ocultar el menú y arrancar el juego como antes se hacía con la tecla start.
Selecciona el botón play en el Inspector y ubica la sección OnClick.
En GameObject, asigna el objeto de escena que gestiona la partida: el GameManager.
En la lista de funciones, elige el método que inicia el juego: StartGame.
Resultado inmediato: al pulsar play, la partida empieza detrás del menú. Aún falta ocultarlo.
¿Qué resuelve exactamente onclick del button?
Define qué método de tus scripts se invoca al pulsar el botón.
Permite vincular eventos de UI con lógica del juego sin código adicional en el botón.
¿Cómo ocultar y mostrar el menú con un menu manager singleton?
Crea un director único que controle todos los menús. Así, el GameManager solo notifica cambios de estado y el menú se muestra u oculta con precisión.
Crea un script C sharp llamado MenuManager y asígnalo (por simplicidad) al propio GameManager.
Expón un Canvas público para arrastrar el canvas global de la UI: menuCanvas.
Implementa un singleton con SharedInstance en Awake.
Usa Canvas.enabled para alternar visibilidad: ShowMainMenu y HideMainMenu.
usingUnityEngine;usingUnityEngine.UI;publicclassMenuManager:MonoBehaviour{publicstaticMenuManager SharedInstance;// instancia compartidapublicCanvas menuCanvas;// canvas global del menúprivatevoidAwake(){if(SharedInstance ==null){ SharedInstance =this;}}publicvoidShowMainMenu(){if(menuCanvas !=null) menuCanvas.enabled =true;}publicvoidHideMainMenu(){if(menuCanvas !=null) menuCanvas.enabled =false;}}
¿Cuándo llamar a show u hide desde el GameManager?
Al empezar la partida: MenuManager.SharedInstance.HideMainMenu();.
En estado menú: MenuManager.SharedInstance.ShowMainMenu();.
Mientras no haya un menú de game over: vuelve a mostrar el principal cuando el estado sea GameState.GameOver.
// Dentro del cambio de estado del juegoif(estado == GameState.Menu){ MenuManager.SharedInstance.ShowMainMenu();}elseif(estado == GameState.GameOver){ MenuManager.SharedInstance.ShowMainMenu();}else// al iniciar la partida{ MenuManager.SharedInstance.HideMainMenu();}
Efecto final: al pulsar play se oculta la UI; al morir el personaje, el menú reaparece y el ciclo de juego queda completo.
¿Cómo implementar el botón quit con compilación condicional en c sharp y unity?
Añade una salida coherente según plataforma. Unity no recomienda forzar la salida en PC o consola: el usuario puede usar el botón home o la acción del sistema. Aun así, prepara el método para cubrir el Editor y las builds.
Implementa ExitGame en MenuManager con compilación condicional.
En el Editor: UnityEditor.EditorApplication.isPlaying = false; (equivale a pulsar stop).
En builds: Application.Quit();.
publicvoidExitGame(){#if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying =false;// salir del modo play en el Editor#else Application.Quit();// salir en builds#endif}
¿Cómo vincular el botón quit desde la ui?
Selecciona el botón quit y abre OnClick.
Asigna el GameObject con MenuManager.
Elige la función: MenuManager.ExitGame.
Prueba: al pulsar quit en el Editor, se detiene la ejecución; en builds, se cierra la app.
Palabras clave que debes dominar: OnClick, GameManager, StartGame, Canvas.enabled, MenuManager, SharedInstance, Awake, ShowMainMenu, HideMainMenu, ExitGame, UnityEditor.EditorApplication.isPlaying, Application.Quit, GameState.Menu, GameState.GameOver. ¿Qué paso implementarás ahora en tu proyecto? Comparte dudas o mejoras en los comentarios.
¡Hola! Si tienes un error el cual consta de que no te muestra las funciones en la propiedad On Click() de tu botón, te recomiendo que revises que estas referenciando al objeto "Game Manager" que se encuentra en tu escena de juego y no el script con el nombre "GameManager". Espero haberte ayudado :D
jajaja justo me pasó eso, gracias!!
jajaja tu comentario me salvo
Falto el enlace para ver sobre los if para plataformas
Object reference not set to an instance of an object GameManager.SetGameState
Yo lo solucione, agregando directamente el contenido a mi scryps GameManager, tras verificar todo mi codigo y conseguirlo igual elegi esa opcion, basicamente no llamas a los metodos desde otro script si no desde ese mismo solo que se te hace mas largo pero es cuestion de conocer tu codigo
¿Qué tan conveniente sería tener todos los scripts Managers en un solo objeto de juego? Así cómo el profesor puso el script MenuManager en el objeto de juego GameManager, también se podría poner el script LevelManager en ese objeto en vez de crear otro objeto de juego LevelManager.
Hola.
No me parece buena idea, ya que te va a quedar un archivo muy extenso y difícil de manipular, por eso es mejor modular el código, para en un futuro sea mas fácil de mantenerlo.
Imagínate que el juego siga creciendo y te llegue a quedar un archivo solo con miles y miles de líneas, te volverías loco.
Espero te haya aclarado un poco.
Saludos!
Hola, Alguien podría ayudarme?
Cuando comienzo el juego me da un bug, que hace que cuando oprima Espacio (Para saltar) se vuelve a reiniciar el juego uno y otra vez :c
Hola, Verifica la configuración de las teclas en el input.
Sí, al profe se le escapó un bug creo, lo puedes arreglar de la siguiente manera (lo escribo en otro comentario porque por alguna razón platzi no me está dejando comentar bien)
¿Se podría deshabilitar el panel (hijo de canvas) sin deshabilitar el canvas?
Claro que si, perfectamente
¿Como?
Alguien sabe como arreglar el error donde no aparace mi personaje?
¿Y si no quiero ocultar todo canvas?
Hola una duda el player se solo los collaider hace todo el salto y demás pero el player la figura es sino se ve alguien podría saber que puede ser...?
Si el player no se ve puede ser el orden de las cosas que tienes en pantalla quizás el player quedó detrás del canvas o detrás background, o estando al mismo nivel a veces se causan conflictos.
Y o tuve este error en dos oportunidades y en ambas se me presento luego de cerrar mi editor de unity para recargarlo y abrirlo habiendo dejado un error de codigo en uno de mis scryps. Lo solucione asiganandole un valor mayor a 0 en el componente Sprite Renderer de mi player, pero si creas tu objeto player con todas sus funciones y vinculaciones de cero lo puedes mantener en el layer 0 y ya no te dara ese error de renderer .
Falta agregar los links en los recursos de la clase
Hola amigos, tengo una duda. Cuando el personaje muere, no me vuelve aparecer el menú, el canvas queda desactivado en false y no me lo cambia a true. Estuve viendo y el metodo de ShowMainMenu, esta correcto, e hice todo como en el video. Asi que mi pregunta seria, ¿Qué posibles problemas podría tener en este caso?. Muchas gracias.
Aparte del código, yo revisaría las vinculaciones que se hacen desde Unity, revisa lo que hace el profe en el vídeo en el minuto 3:07, quizás ahí esté la clave.
Saludos,
No me aparece en ese color los #if ni ninguno
Puede ser que estés en otro editor de código, cada editor tiene formas diferentes de señalizar las palabras clave
Para separar un poco las cosas, llame al método HideMainMenu() desde el mismo botón, como se hizo con el StartGame() del GameManager
Holaa, alguien me ayuda porfavor, no me funciona el #if en el editor
Excelente!
no me funciona el boton de play button y me sale esto ArgumentException: Input Button Play Button is not setup
¡Hola!
¿Cómo tienes configurado tu botón?
Usualmente ese error sale porque no está configurado correctamente tu botón
Quiero pensar que no le has puesto ninguna accion en el evento OnClick que tiene tu boton
Cuando quiero darle una funcion a Game manager en "On click" no me sale la opcion de Game Object. Solo me sale Mono Script
Si si pusite el código de la función verifica que esté público
public void Saltar(){
//ejemplo
}
Aunque un poco tarde, responderé a esta problemática. El Game Manager que debe ser arrastrado a la función "On Click" es el de la escena, y no el script. Al hacer esto, en lugar del MonoScript, tendrás la opción de elegir cualquier método dentro.