← Voltar ao blog

Conecte um HUD do AI Studio a Eventos de Saúde com Unity MCP

Após o AI Studio exportar um prefab de HUD para Unity, use Cursor + Unity MCP para assinar eventos de saúde, atualizar a barra e o texto de dano, com checklist de Play e correções comuns.

Publicado
  • Unity MCP
  • AI Studio
  • HUD
  • Unity
  • Cursor
  • AI game development
  • tutorial

Título

Conecte um HUD do AI Studio a Eventos de Saúde com Unity MCP

Descrição

Após o AI Studio exportar um prefab de HUD para Unity, use Cursor + Unity MCP para assinar eventos de saúde, atualizar a barra e o texto de dano, com checklist de Play e correções comuns.

Corpo (Markdown, sem frontmatter)

O HUD está no Unity, a barra parece correta, mas o combate não a move—geralmente o prefab está correto e UI e gameplay não compartilham os mesmos eventos de saúde. O Design já exportou o HUD principal como Canvas / Prefab do VberAI Studio. O Gameplay deve usar Unity MCP no projeto aberto para conectar mudanças de PlayerHealth a um Slider / Image.fillAmount, e então verificar no modo Play.

Este post cobre apenas essa conexão—não a exportação do Figma ou a instalação do MCP.

EtapaFerramentaSaída
Estrutura do HUD no motorAI StudioPrefab de HUD com nomes estáveis
Anexar scripts, vincular referências, editar cenaCursor (ou Claude Code) + Unity MCPPlayerHealth ↔ HudHealthView
AceitarUnity PlayComprimento da barra muda ao dano / cura

Relacionados:

Combine os nomes antes do polimento

Após a exportação do AI Studio, o código deve encontrar a barra via caminho ou referências serializadas. Antes de exportar (ou logo após importar), mantenha os nomes estáveis:

PapelNome sugeridoNotas
Raiz do HUDHUD_RootÚnico na cena
Preenchimento de saúdeHUD_HealthFillImage (Filled) ou sob Slider.fillRect
Texto de valor opcionalHUD_HealthTextTextMeshProUGUI, ex.: 80/100
Flash de dano opcionalHUD_DamageFlashImage em tela cheia ou borda, transparente por padrão

Evite padrões de design como Rectangle 42 ou Group 3—tanto o MCP quanto scripts escritos à mão herdarão a bagunça.

Passo 1: Confirme que o HUD está na cena

  1. Abra a cena do jogador (ex.: Game)
  2. A Hierarquia deve mostrar HUD_Root (ou seu equivalente) com uma Image / Slider de saúde sob ele
  3. O Canvas Render Mode e a configuração da câmera estão corretos (Screen Space - Overlay é o mais simples)

Teste de fumaça somente leitura via MCP (não edite a cena):

Liste GameObjects na cena ativa cujos nomes contenham HUD, e os tipos de componentes de UI neles. Não modifique nada.

Se a lista estiver vazia: re-exporte/sincronize do AI Studio, ou verifique se o Prefab foi solto na cena errada.

Passo 2: O gameplay expõe mudanças de saúde—nunca encontre a UI

Mantenha a saúde no jogador e transmita com um evento C# (ou UnityEvent). O HUD apenas assina; não deve dirigir a lógica via Find("Player").

Peça ao Unity MCP do Cursor (caminhos podem corresponder ao seu projeto):

Crie Assets/Scripts/Combat/PlayerHealth.cs:
- maxHealth, currentHealth (float)
- event Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float); clamp para 0..max
- Se current<=0 após dano, dispare OnHealthChanged novamente e opcionalmente OnDied
- Anexe ao Player da cena; transmita uma vez no Start
Não modifique nenhum nó do HUD.

Implementação de referência (gere, depois revise):

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 dano temporária para conexão (delete depois):

Adicione DebugDealDamage.cs temporário no Player: pressionar H causa 10 de dano ao PlayerHealth no mesmo objeto. Apenas para aceitação da conexão.

Passo 3: A visão do HUD apenas escuta e atualiza a barra

Adicione um script de visão com referências serializadas. Não use GameObject.Find a cada frame em Update.

Crie Assets/Scripts/UI/HudHealthView.cs:
- Serialize Image healthFill (Filled, Horizontal)
- Opcional TMP_Text healthText
- Serialize PlayerHealth playerHealth (ou resolva o PlayerHealth único no Awake)
- OnEnable assine OnHealthChanged; OnDisable cancele a assinatura
- No callback: healthFill.fillAmount = current/max; texto $"{current:0}/{max:0}"
- Anexe a HUD_Root; atribua a Image HUD_HealthFill a healthFill
- Atribua o PlayerHealth do Player a playerHealth

Referência:

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;
        // Se você assinar após o Start, puxe uma vez; aqui confiamos no 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)}";
    }
}

Se a Image não estiver como Filled: peça ao MCP para definir Image Type = Filled, Fill Method = Horizontal, e então vincule fillAmount. Com um Slider, escreva slider.value = t (minValue=0, maxValue=1)—mesmo padrão.

Passo 4: Deixe o Unity MCP preencher as referências serializadas

Após compilar, seja explícito no Cursor:

Na cena ativa:
1. Confirme que o Player tem PlayerHealth; HUD_Root tem HudHealthView
2. Aponte HudHealthView.healthFill para a Image chamada HUD_HealthFill
3. Aponte HudHealthView.playerHealth para o PlayerHealth do Player
4. Se HUD_HealthText existir, atribua o TMP_Text
5. Salve a cena
Depois liste quaisquer campos serializados None restantes nesses dois componentes.

Verificação somente leitura:

Inspecione as referências de HudHealthView e PlayerHealth: há scripts ausentes ou campos None? Apenas relate—não edite a cena.

Passo 5: Checklist de aceitação no Play

Entre no Play e marque todos estes antes de considerar a conexão concluída:

  1. Ao entrar: a barra está cheia (ou corresponde a current/max), não vazia/desatualizada
  2. Pressione H (ou acerte o jogador): fillAmount diminui; texto atualiza se presente
  3. Dano até 0: barra vazia; estado de morte estável; HUD não oscila
  4. Cura: barra sobe (tecla temporária ou item)
  5. Sair do Play e reentrar: referências ainda válidas; sem Missing Script

Prompt de aceitação:

Estou aceitando a conexão do HUD no modo Play. Se o Console mostrar NullReferenceException, diga se é PlayerHealth ou HudHealthView e qual campo serializado está None. Diagnostique primeiro, proponha a correção mínima, aguarde meu OK antes de editar.

Pontos de quebra comuns

SintomaVerifique primeiro
Barra nunca se move no PlayOnHealthChanged não assinado; ou dano nunca chama TakeDamage
NRE ao entrar no PlayhealthFill / playerHealth ainda None
Barra invertida ou saltandoImage não Filled; Rect errado usado como preenchimento
Texto travadoTMP errado; erros de fonte ausente no componente
IA edita objetos erradosPrompt: “Apenas toque em HUD_Root / Player; não mova geometria do nível”

Regra: gameplay muda a saúde; UI apenas escuta. Não use Find("HUD_HealthFill") dentro de PlayerCombat—o próximo re-export do AI Studio com renomeação quebrará o combate também.

Convivendo com re-exports do HUD

Quando o design re-exporta do AI Studio:

  1. Mantenha os nomes HUD_HealthFill / HUD_Root quando possível
  2. Após reimportar, apenas reexecute as verificações de referência do passo 4—não deixe o MCP reescrever PlayerHealth
  3. Mantenha o script de visão no projeto; re-vincule se as referências da variante do Prefab forem limpas

Prompt de limite de uma linha:

Esta passagem apenas corrige referências perdidas de UI Prefab. Não altere nenhum script de gameplay sob Assets/Scripts/Combat.

Resumo

  1. AI Studio entrega a estrutura do HUD no Unity
  2. PlayerHealth transmite (current, max)
  3. HudHealthView assina e atualiza fillAmount / texto
  4. Unity MCP anexa componentes, preenche referências serializadas, aplica correções mínimas no Console
  5. Aceite com uma tecla de dano + checklist de Play—não “script gerado com sucesso”

Isso fecha um loop repetível: UI no motor → conexão de eventos → aceitação no Play. Bolsas, barras de mana e barras de chefe podem copiar o mesmo padrão.

Mais guias que podem interessar

ChinaJoy 2026: Notas do Estande da VberAI no Hall W5

VberAI na ChinaJoy 2026 (Centro de Exposições Internacional de Xangai, Hall W5): visitantes e tomadores de decisão, brochuras esgotadas no primeiro dia, forte interesse de clientes russos, conversas com empresa coreana de ativos 3D e geração de ativos 3D para jogos no próximo mês com possível integração de pipeline.

  • ChinaJoy
  • VberAI
  • AI Studio
  • 3D assets
Ler mais