Mostrar el daño en pantalla con un texto que sube y desaparece aporta claridad inmediata al jugador. Aquí verás cómo crear un damage number reutilizable en Unity: configura el UI Text, muévelo en Update, destrúyelo tras unos segundos e instáncialo desde el arma para cada golpe. Todo con C# y buenas prácticas de prefab.
¿Cómo crear y configurar el texto de daño en Unity UI?
Para reutilizar un mismo asset en múltiples casos (daño, curación, impacto al protagonista), se parte de un prefab con un componente de texto. El script expone variables públicas para ajustar velocidad, valor y referencia al UI Text desde el editor.
¿Qué variables públicas necesitas?
damageSpeed: velocidad a la que sube el texto.
damagePoints: valor numérico a mostrar.
damageText: referencia al componente Text de UnityEngine.UI.
No es necesario Start: se asigna todo desde el inspector.
¿Cómo se actualiza el contenido y la posición en Update?
El texto se construye con damagePoints.ToString().
El movimiento vertical usa Time.deltaTime para suavidad.
Los ejes x y z se mantienen, solo cambia y.
No hay físicas: se modifica transform.position directamente.
¿Cómo destruir el prefab tras un tiempo con un script simple?
Para evitar acumular objetos en la jerarquía, se destruye el texto tras unos segundos con un script mínimo. Así se mantiene el rendimiento y se limpia la interfaz automáticamente.
usingUnityEngine;publicclassDestroyAfterTime:MonoBehaviour{publicfloat timeToDestroy;// por ejemplo 1.5fvoidUpdate(){ timeToDestroy -= Time.deltaTime;if(timeToDestroy <=0f){Destroy(gameObject);}}}
Añade el script al prefab del daño.
Configura timeToDestroy en el inspector.
Verás desaparecer el objeto de la jerarquía al cumplirse el tiempo.
Usa Apply All para propagar cambios al prefab padre cuando veas marcas en el inspector.
¿Cómo instanciar el prefab desde el arma y pasar el valor de daño?
El responsable de crear el texto al golpear es el script del arma, por ejemplo WeaponDamage. Se instancia el prefab en el punto de impacto y se inyecta el daño actual del arma.
¿Dónde asignar y cómo evitar rotaciones?
Declara una variable pública GameObject damageNumber en el arma.
Arrastra el prefab al campo correspondiente en la swing zone.
Instancia en la posición del hitPoint con Quaternion.Euler(Vector3.zero) para evitar texto inclinado.
Almacena el clon para editar su componente DamageNumber.