Conecta un HUD de AI Studio a Eventos de Salud con Unity MCP
Después de que AI Studio exporta un prefab de HUD de Unity, usa Cursor + Unity MCP para suscribirte a eventos de salud, actualizar la barra y el texto de daño, con una lista de verificación en modo Play y soluciones comunes.
- Unity MCP
- AI Studio
- HUD
- Unity
- Cursor
- AI game development
- tutorial
El HUD está en Unity, la barra se ve bien, pero el combate no la mueve—generalmente el prefab está bien y la UI y el gameplay no comparten los mismos eventos de salud. El diseño ya exportó el HUD principal como un Canvas / Prefab desde VberAI Studio. El gameplay debería usar Unity MCP en el proyecto abierto para conectar los cambios de PlayerHealth a un Slider / Image.fillAmount, y luego verificar en modo Play.
Esta publicación cubre solo esa conexión—no la exportación de Figma ni la instalación de MCP.
| Paso | Herramienta | Resultado |
|---|---|---|
| Estructura del HUD en el motor | AI Studio | Prefab de HUD con nombres estables |
| Adjuntar scripts, vincular referencias, editar escena | Cursor (o Claude Code) + Unity MCP | PlayerHealth ↔ HudHealthView |
| Aceptar | Unity Play | La longitud de la barra cambia con daño / curación |
Relacionado:
Acuerda los nombres antes de pulir
Después de la exportación de AI Studio, el código debe encontrar la barra mediante ruta o referencias serializadas. Antes de exportar (o justo después de importar), mantén los nombres estables:
| Rol | Nombre sugerido | Notas |
|---|---|---|
| Raíz del HUD | HUD_Root | Único en la escena |
| Relleno de salud | HUD_HealthFill | Image (Filled) o bajo Slider.fillRect |
| Texto de valor opcional | HUD_HealthText | TextMeshProUGUI, ej. 80/100 |
| Destello de daño opcional | HUD_DamageFlash | Imagen de pantalla completa o borde, transparente por defecto |
Evita los nombres predeterminados del diseño como Rectangle 42 o Group 3—tanto MCP como los scripts escritos a mano heredarán el desorden.
Paso 1: Confirma que el HUD está en la escena
- Abre la escena del jugador (ej.
Game) - La jerarquía debería mostrar
HUD_Root(o tu equivalente) con una imagen de salud / Slider debajo - El modo de renderizado del Canvas y la configuración de la cámara son correctos (Screen Space - Overlay es lo más simple)
Prueba de humo de solo lectura mediante MCP (no edites la escena):
Lista los GameObjects en la escena activa cuyos nombres contengan HUD, y los tipos de componentes UI en ellos. No modifiques nada.
Si la lista está vacía: re-exporta/sincroniza desde AI Studio, o verifica que el Prefab se colocó en la escena incorrecta.
Paso 2: El gameplay expone los cambios de salud—nunca busques la UI
Mantén la salud en el jugador y transmite con un evento de C# (o UnityEvent). El HUD solo se suscribe; no debe conducir la lógica mediante Find("Player").
Pide a Unity MCP desde Cursor (las rutas pueden coincidir con tu proyecto):
Crea Assets/Scripts/Combat/PlayerHealth.cs:
- maxHealth, currentHealth (float)
- event Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float); clamp a 0..max
- Si current<=0 después del daño, dispara OnHealthChanged de nuevo y opcionalmente OnDied
- Adjunta al Player de la escena; transmite una vez en Start
No modifiques ningún nodo del HUD.
Implementación de referencia (genera, luego revisa):
using System;
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
[SerializeField] float maxHealth = 100f;
float currentHealth;
public event Action<float, float> OnHealthChanged;
public event Action OnDied;
void Awake() => currentHealth = maxHealth;
void Start() => OnHealthChanged?.Invoke(currentHealth, maxHealth);
public void TakeDamage(float amount)
{
if (amount <= 0f || currentHealth <= 0f) return;
currentHealth = Mathf.Max(0f, currentHealth - amount);
OnHealthChanged?.Invoke(currentHealth, maxHealth);
if (currentHealth <= 0f) OnDied?.Invoke();
}
public void Heal(float amount)
{
if (amount <= 0f || currentHealth <= 0f) return;
currentHealth = Mathf.Min(maxHealth, currentHealth + amount);
OnHealthChanged?.Invoke(currentHealth, maxHealth);
}
}
Tecla de daño temporal para la conexión (eliminar después):
Agrega DebugDealDamage.cs temporal en Player: presionar H inflige 10 de daño a PlayerHealth en el mismo objeto. Solo para aceptación de la conexión.
Paso 3: La vista del HUD solo escucha y actualiza la barra
Agrega un script de vista con referencias serializadas. No uses GameObject.Find cada frame en Update.
Crea Assets/Scripts/UI/HudHealthView.cs:
- Serialize Image healthFill (Filled, Horizontal)
- Opcional TMP_Text healthText
- Serialize PlayerHealth playerHealth (o resuelve el PlayerHealth único en Awake)
- OnEnable suscribirse a OnHealthChanged; OnDisable desuscribirse
- En el callback: healthFill.fillAmount = current/max; texto $"{current:0}/{max:0}"
- Adjuntar a HUD_Root; asignar la imagen HUD_HealthFill a healthFill
- Asignar el PlayerHealth del Player a playerHealth
Referencia:
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class HudHealthView : MonoBehaviour
{
[SerializeField] PlayerHealth playerHealth;
[SerializeField] Image healthFill;
[SerializeField] TMP_Text healthText;
void OnEnable()
{
if (playerHealth == null) return;
playerHealth.OnHealthChanged += HandleHealthChanged;
// Si te suscribes después de Start, obtén una vez; aquí confiamos en PlayerHealth.Start
}
void OnDisable()
{
if (playerHealth == null) return;
playerHealth.OnHealthChanged -= HandleHealthChanged;
}
void HandleHealthChanged(float current, float max)
{
float t = max > 0f ? current / max : 0f;
if (healthFill != null) healthFill.fillAmount = t;
if (healthText != null) healthText.text = $"{Mathf.CeilToInt(current)}/{Mathf.CeilToInt(max)}";
}
}
Si la Image no es Filled: haz que MCP establezca Image Type = Filled, Fill Method = Horizontal, y luego vincula fillAmount. Con un Slider, escribe slider.value = t (minValue=0, maxValue=1)—mismo patrón.
Paso 4: Deja que Unity MCP complete las referencias serializadas
Después de compilar, sé explícito en Cursor:
En la escena activa:
1. Confirma que Player tiene PlayerHealth; HUD_Root tiene HudHealthView
2. Apunta HudHealthView.healthFill a la Image llamada HUD_HealthFill
3. Apunta HudHealthView.playerHealth al PlayerHealth del Player
4. Si HUD_HealthText existe, asigna el TMP_Text
5. Guarda la escena
Luego lista cualquier campo serializado None restante en esos dos componentes.
Verificación de solo lectura:
Inspecciona las referencias de HudHealthView y PlayerHealth: ¿hay scripts faltantes o campos None? Informa solo—no edites la escena.
Paso 5: Lista de verificación de aceptación en Play
Entra en Play y marca todos estos antes de dar por terminada la conexión:
- Al entrar: la barra está llena (o coincide con
current/max), no vacía o desactualizada - Presiona H (o golpea al jugador):
fillAmountbaja; el texto se actualiza si está presente - Daño a 0: la barra vacía; el estado de muerte estable; el HUD no parpadea
- Curación: la barra sube (tecla temporal o recogida)
- Salir de Play y volver a entrar: las referencias siguen válidas; sin Missing Script
Indicación de aceptación:
Estoy aceptando la conexión del HUD en modo Play. Si la consola muestra NullReferenceException, di si es PlayerHealth o HudHealthView y qué campo serializado es None. Diagnostica primero, propón la solución mínima, espera mi OK antes de editar.
Puntos de fallo comunes
| Síntoma | Revisa primero |
|---|---|
| La barra nunca se mueve en Play | OnHealthChanged no suscrito; o el daño nunca llega a TakeDamage |
| NRE al entrar en Play | healthFill / playerHealth siguen en None |
| Barra invertida o saltos | Image no es Filled; se usa un Rect incorrecto como relleno |
| Texto atascado | TMP incorrecto; errores de fuente faltante en el componente |
| IA edita los objetos equivocados | Indicación: “Solo toca HUD_Root / Player; no muevas la geometría del nivel” |
Regla: el gameplay cambia la salud; la UI solo escucha. No uses Find("HUD_HealthFill") dentro de PlayerCombat—el próximo cambio de nombre en la re-exportación de AI Studio romperá también el combate.
Conviviendo con las re-exportaciones del HUD
Cuando el diseño re-exporta desde AI Studio:
- Mantén los nombres
HUD_HealthFill/HUD_Rootcuando sea posible - Después de reimportar, solo vuelve a ejecutar las verificaciones de referencias del paso 4—no dejes que MCP reescriba
PlayerHealth - Mantén el script de vista en el proyecto; re-vincula si las referencias de la variante del Prefab se borraron
Indicación de límite de una línea:
Esta pasada solo corrige referencias perdidas de UI Prefab. No cambies ningún script de gameplay bajo Assets/Scripts/Combat.
Resumen
- AI Studio entrega la estructura del HUD en Unity
PlayerHealthtransmite(current, max)HudHealthViewse suscribe y actualizafillAmount/ texto- Unity MCP adjunta componentes, completa referencias serializadas, aplica correcciones mínimas de consola
- Acepta con una tecla de daño + lista de verificación de Play—no con “script generado exitosamente”
Eso cierra un bucle repetible: UI al motor → conexión de eventos → aceptación en Play. Las bolsas, barras de maná y barras de jefe pueden copiar el mismo patrón.
Seguir leyendo
Más guías que te pueden interesar
Figma a Godot UI: Exporta una Jerarquía de Control con AI Studio (Paso a Paso)
Importa UI de juego de Figma a Godot: mantén la estructura de Frames en VberAI Studio, exporta una jerarquía de nodos Control y verifica el layout y Theme en el editor.
- figma-to-godot
- figma
- godot
- ai-studio
VberAI Studio: Ensamblaje de Sprite Sheets vs División de Fotogramas de Video para Unity / Godot / Cocos
VberAI Studio genera video de acción, divide fotogramas en el lienzo y entrega a Unity, Godot y Cocos. Compara sprite sheets de GPT Image y pipelines DIY de código abierto: cuál ahorra tiempo y cuándo usar Studio.
- vberai
- ai-studio
- sprite-frames
- sequence-frames
Jerarquía de información del HUD móvil: qué mostrar en combate, lobby y modales
Visibilidad y prioridad del HUD según el estado de juego; su relación con Safe Area, capas de texto flotante y apilado de modales, con tablas y pasos de aceptación en dispositivo.
- game-ui-design
- game-dev-ai
- ui-to-engine
- hud