Optimiza tu HUD en Unity con una configuración clara y sostenible: conecta la UI del juego a un script de C# para mostrar monedas, puntuación y puntuación máxima en tiempo real. Verás cómo usar UnityEngine.UI, enlazar variables públicas desde el inspector y formatear decimales con precisión, listo para integrarse con tu Game Manager.
¿Cómo configurar el script de la vista del juego en Unity?
Para mostrar datos en pantalla desde el Game Canvas, crea un script dedicado, por ejemplo, Game View, y así podrás actualizar solo lo necesario cuando se esté jugando. Activa el Game Canvas si está oculto para poder asignar referencias en el editor.
¿Qué librería habilita el tipo Text en la UI?
Importa la librería de interfaz: using UnityEngine.UI.
Sin esta importación, el tipo Text no aparece en C#.
Recuerda: UI significa User Interface.
¿Cómo mapear los elementos del inspector a variables públicas?
Declara variables públicas de tipo Text para cada campo: monedas, puntuación y puntuación máxima.
Asigna desde el editor arrastrando cada Text del Game Canvas a su casilla en el componente del script.
Ventaja: separación nítida entre lógica y presentación.
usingUnityEngine;usingUnityEngine.UI;publicclassGameView:MonoBehaviour{publicText coinsText, scoreText, maxScoreText;voidUpdate(){// Actualizar solo si estamos en la partida.if(GameManager.Instance.CurrentGameState == GameState.InGame){int coins =0;// placeholderfloat score =0f;// placeholderfloat maxScore =0f;// placeholder coinsText.text = coins.ToString(); scoreText.text ="Score: "+ score.ToString("F1"); maxScoreText.text ="Max score: "+ maxScore.ToString("F1");}}}
¿Cómo y cuándo actualizar la UI con datos del juego?
Usa Update pero condiciona la escritura a estar en el estado de juego activo. Esto evita cálculos y escrituras innecesarias cuando no se está jugando y mantiene el HUD limpio.
¿Por qué usar int para monedas y float para puntuaciones?
Monedas: valores contables. Se representan naturalmente con int.
Puntuación basada en distancia recorrida: medida continua. Se expresa mejor con float.
Beneficio: precisión adecuada sin desperdiciar memoria ni complicar el formato.
¿Cómo formatear decimales con toString para una lectura limpia?
Convierte tipos numéricos a texto antes de mostrarlos: ToString().
Puntuaciones con decimales: usa ToString("F1") para limitar a un decimal.
Concatenación clara de etiquetas y valores: "Score: " + valor.
coinsText.text = coins.ToString();// int → stringscoreText.text ="Score: "+ score.ToString("F1");// float → string con 1 decimalmaxScoreText.text ="Max score: "+ maxScore.ToString("F1");
¿Qué prácticas mejoran la claridad y preparación del HUD?
Preparar la estructura ahora te permitirá integrar los datos reales sin rehacer la interfaz. Prioriza la legibilidad, el orden y la verificación de estado.
Usa placeholders numéricos iniciales (0, 0.0) hasta conectar la lógica del juego.
Actualiza la UI solo en GameState.InGame mediante el singleton del Game Manager.
Oculta el canvas que no uses para reducir ruido visual al configurar.
Emplea etiquetas concisas: "Score:" y "Max score:" seguidas del valor.
Evita demasiados decimales en pantalla: un decimal es suficiente para la puntuación.
Conecta todas las referencias del Game Canvas al script antes de ejecutar.
¿Te gustaría compartir cómo nombras tus variables UI o cómo organizas estados de juego para mantener el HUD consistente?
Para los que estéis usando TextMeshPro en lugar de Text tenéis que importar TMPro y usar TextMeshProGUI como tipo de dato en lugar de Text.
using System.Collections;using System.Collections.Generic;using UnityEngine;using TMPro;publicclassGameView:MonoBehaviour{publicTextMeshProUGUI coinText, scoreText, maxScoreText;// Start is called before the first frame updatevoidStart(){}// Update is called once per framevoidUpdate(){if(GameManager.sharedInstance.currentGameState==GameState.IN_GAME){ int coins =0; float score =0; float maxScore =0; coinText.text= coins.ToString(); scoreText.text="Score "+ score.ToString("f1"); maxScoreText.text="Max Score "+ maxScore.ToString("f1");}}}
gracias!!! me pasé un rato tratando de encontrar porque no reconocía el text al querer ligarlo con el scrip!!! :)
muchas graciasss no entendia nada xd
Int es para guardar numero enteros 1,2,3,4,5
y float guarda números con decimales 1.1,1.2,1.3,1.4,1.5, y con la variable float vamos a guardar cada mm que camine el personaje , para tener un contador mas exacto
Exacto.
Pienso yo que la variable int y la variable float tienen difetente capacidad de memoria por lo tanto el entero que es para los coins que se va a recolectar en ese nivel que no van a ser mas de ''200'' eso es un ejemplo mientras que el Score van a ser mas, porque es la suma de todos los coins que has recogido en los niveles y necesitas una memoria mas grande para guardar los coins. creo que es eso.
Los ints es para solo numero enteros mientras los float es para enteros y decimales.
Como no vamos a tener un score que de numeros decimales como resultado, es mejor ocupar int pues solo queremos numeros enteros
Si no vamos a la logica, las monedas nunca seran decimales, en la logica del juego no puedo tomar la mitad de una moneda.
Si por el otro lado voy a contar cuantos metros recorro como en el juego del dinosaurio de google, entonces necesitare contar medios metros
Excelente referencia
Un dato tipo Int es una cantidad precisa y/o esacta 1,20, 100.
Mientras que un dato tipo float es flotatante lo que significa que es irregular en su resultado 1,30. 20,458. 100,2934.
exacto
la interpolación de los scores se puede simplificar así:
tengo una consulta, yo oculto la UI de game Canvas y al hacer click en play no me aparece, como si al profe, hay algo mal que hice? o que puede ser?
Selecciona el Canvas y revisa en el Inspector si lo tienes deshabilitado:
Si se encuentra deshabilitado no lo podrás visualizar al darle Play. A menos de que lo habilites por código.
Saludos!
muchas gracias y pues, lo deshabilito solo el canvas como sale en el video, y dejo el del menu y al darle play no me sale :c el objeto en si no lo deshabilito
hola hace unas semanas no continue con el proyecto pero ahora que vuelvo a ver , las variables que tenia ya asignadas se quitaron y ya no me deja volverlas a ponerlas en el inspector , me refiero a las variables como coins text score text max score, al igua de las mas antiguas como el StartPoins y endPoint se quitaron, y siempre me asegure de guardar, ayuda
Hola, no he podido hacer que aparezca el game menu canvas mientras juego y luego el game over canvas cuando muere el player.
Solo veo el main menu antes de jugar y vuelve a aparecer el main menu al morir.
Alguien podria asesorarme?
Gracias
Hola, podrias compartir el codigo para ver en que esta fallando?
Revisa que solo el componente canvas tenga desactivado el checkbox y no el gameObject (que es el primero que aparece).
Ya sabemos la diferencia entre Int y Float
El Score equivale a la distancia recorrida por el usuario en una partida, por lo tanto, para una referencia más exacta, se debe usar decimales
Mientras que las monedas son números enteros y no necesitan de decimales para exactitud
A pesar de que int nos permite trabajar con números muy grandes, existe una limitación, que si trabajamos con números más nos vale conocer para tener en cuenta.
Los valores de un tipo de dato int son:
-2,147,483,648 a 2,147,483,647
En el caso que queramos trabajar con números aún más grandes, existe el tipo "long":
-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807
Link de referencia
Score ![](
Es por que una variable int puede guardar solo datos enteros mientas que un float puede guardar muchos decimales
Se debe guardar algunos datos en variables enteras cuando no hay posibilidad de que sean decimales
Hola si dan doble clic en la pantalla de el video y denle en la opción de, imagen con imagen incrustada