← Torna al blog

Collega un HUD di AI Studio agli Eventi di Salute con Unity MCP

Dopo che AI Studio esporta un prefab HUD Unity, usa Cursor + Unity MCP per sottoscrivere eventi di salute, aggiornare barra e testo danni, con checklist Play-mode e fix comuni.

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

L’HUD è in Unity, la barra sembra a posto, ma il combattimento non la muove—di solito il prefab è ok e UI e gameplay non condividono gli stessi eventi di salute. Il design ha già esportato l’HUD principale come Canvas / Prefab da VberAI Studio. Il gameplay dovrebbe usare Unity MCP nel progetto aperto per connettere i cambiamenti di PlayerHealth a uno Slider / Image.fillAmount, poi verificare in Play mode.

Questo post copre solo quel collegamento—non l’esportazione Figma o l’installazione di MCP.

PassoStrumentoOutput
Struttura HUD nel motoreAI StudioPrefab HUD con nomi stabili
Allega script, collega riferimenti, modifica scenaCursor (o Claude Code) + Unity MCPPlayerHealth ↔ HudHealthView
AccettaUnity PlayLa lunghezza della barra cambia su danno / cura

Correlati:

Concorda i nomi prima della rifinitura

Dopo l’esportazione AI Studio, il codice deve trovare la barra tramite percorso o riferimenti serializzati. Prima dell’esportazione (o subito dopo l’importazione), mantieni nomi stabili:

RuoloNome suggeritoNote
Radice HUDHUD_RootUnico nella scena
Riempimento saluteHUD_HealthFillImage (Filled) o sotto Slider.fillRect
Testo valore opzionaleHUD_HealthTextTextMeshProUGUI, es. 80/100
Flash danno opzionaleHUD_DamageFlashSchermo intero o bordo Image, trasparente di default

Evita default di design come Rectangle 42 o Group 3—sia MCP che script scritti a mano erediteranno il caos.

Passo 1: Conferma che l’HUD sia nella scena

  1. Apri la scena del giocatore (es. Game)
  2. La gerarchia dovrebbe mostrare HUD_Root (o equivalente) con un’Image salute / Slider sotto
  3. Render Mode Canvas e configurazione camera corretti (Screen Space - Overlay è il più semplice)

Test fumo read-only tramite MCP (non modificare la scena):

Elenca i GameObject nella scena attiva i cui nomi contengono HUD, e i tipi di componenti UI su di essi. Non modificare nulla.

Se la lista è vuota: riesporta/sincronizza da AI Studio, o controlla che il Prefab sia stato trascinato nella scena sbagliata.

Passo 2: Il gameplay espone i cambiamenti di salute—mai trovare la UI

Mantieni la salute sul giocatore e trasmetti con un evento C# (o UnityEvent). L’HUD si sottoscrive solo; non deve guidare la logica tramite Find("Player").

Chiedi a Unity MCP da Cursor (i percorsi possono corrispondere al tuo progetto):

Crea Assets/Scripts/Combat/PlayerHealth.cs:
- maxHealth, currentHealth (float)
- evento Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float); clamp a 0..max
- Se current<=0 dopo il danno, invoca OnHealthChanged di nuovo e opzionalmente OnDied
- Allega al Player nella scena; trasmetti una volta in Start
Non modificare alcun nodo HUD.

Implementazione di riferimento (genera, poi rivedi):

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);
    }
}

Tasto danno temporaneo per il collegamento (elimina dopo):

Aggiungi DebugDealDamage.cs temporaneo su Player: premendo H infligge 10 danni a PlayerHealth sullo stesso oggetto. Solo per accettazione collegamento.

Passo 3: La vista HUD ascolta e aggiorna la barra

Aggiungi uno script vista con riferimenti serializzati. Non usare GameObject.Find ogni frame in Update.

Crea Assets/Scripts/UI/HudHealthView.cs:
- Serialize Image healthFill (Filled, Horizontal)
- Opzionale TMP_Text healthText
- Serialize PlayerHealth playerHealth (o risolvi l'unico PlayerHealth in Awake)
- OnEnable sottoscrivi OnHealthChanged; OnDisable annulla sottoscrizione
- Nel callback: healthFill.fillAmount = current/max; testo $"{current:0}/{max:0}"
- Allega a HUD_Root; assegna l'Image HUD_HealthFill a healthFill
- Assegna il PlayerHealth del Player a playerHealth

Riferimento:

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 ti sottoscrivi dopo Start, tira una volta; qui ci affidiamo a 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 l’Image non è Filled: fai impostare a MCP Image Type = Filled, Fill Method = Horizontal, poi collega fillAmount. Con uno Slider, scrivi slider.value = t (minValue=0, maxValue=1)—stesso schema.

Passo 4: Lascia che Unity MCP riempia i riferimenti serializzati

Dopo la compilazione, sii esplicito in Cursor:

Nella scena attiva:
1. Conferma che Player ha PlayerHealth; HUD_Root ha HudHealthView
2. Punta HudHealthView.healthFill all'Image chiamata HUD_HealthFill
3. Punta HudHealthView.playerHealth al PlayerHealth del Player
4. Se HUD_HealthText esiste, assegna il TMP_Text
5. Salva la scena
Poi elenca eventuali campi serializzati rimasti None su quei due componenti.

Controllo read-only:

Ispeziona i riferimenti HudHealthView e PlayerHealth: script mancanti o campi None? Riporta solo—non modificare la scena.

Passo 5: Checklist di accettazione Play

Entra in Play e spunta tutti questi prima di dichiarare il collegamento completato:

  1. All’ingresso: barra piena (o corrispondente a current/max), non vuota/obsoleta
  2. Premi H (o colpisci il player): fillAmount scende; testo aggiornato se presente
  3. Danno a 0: barra vuota; stato morte stabile; HUD non sfarfalla
  4. Cura: barra sale (tasto temporaneo o pickup)
  5. Esci da Play e rientra: riferimenti ancora validi; nessuno script mancante

Prompt di accettazione:

Sto accettando il collegamento HUD in Play mode. Se la Console mostra NullReferenceException, di' se è PlayerHealth o HudHealthView e quale campo serializzato è None. Diagnostica prima, proponi la correzione minima, attendi il mio OK prima di modificare.

Punti di rottura comuni

SintomoControlla prima
La barra non si muove mai in PlayOnHealthChanged non sottoscritto; o il danno non colpisce mai TakeDamage
NRE all’ingresso in PlayhealthFill / playerHealth ancora None
Barra invertita o saltiImage non Filled; Rect sbagliato usato come riempimento
Testo bloccatoTMP sbagliato; errori font asset mancanti sul componente
AI modifica oggetti sbagliatiPrompt: “Tocca solo HUD_Root / Player; non spostare la geometria del livello”

Regola: il gameplay cambia la salute; la UI ascolta solo. Non usare Find("HUD_HealthFill") dentro PlayerCombat—la prossima riesportazione AI Studio con rinomina romperà anche il combattimento.

Convivenza con le riesportazioni HUD

Quando il design riesporta da AI Studio:

  1. Mantieni i nomi HUD_HealthFill / HUD_Root quando possibile
  2. Dopo la reimportazione, esegui solo i controlli riferimenti del passo 4—non lasciare che MCP riscriva PlayerHealth
  3. Mantieni lo script vista nel progetto; ricollega se i riferimenti della variante Prefab sono stati cancellati

Prompt di confine in una riga:

Questa passata risolve solo riferimenti Prefab UI persi. Non cambiare alcuno script gameplay sotto Assets/Scripts/Combat.
  1. AI Studio consegna la struttura HUD in Unity
  2. PlayerHealth trasmette (current, max)
  3. HudHealthView si sottoscrive e aggiorna fillAmount / testo
  4. Unity MCP allega componenti, riempie riferimenti serializzati, applica fix Console minimi
  5. Accetta con un tasto danno + checklist Play—non “script generato con successo”

Questo chiude un ciclo ripetibile: UI nel motore → collegamento eventi → accettazione Play. Borse, barre mana e barre boss possono copiare lo stesso schema.

Altre guide che potrebbero interessarti