Connectez un HUD d'AI Studio aux événements de santé avec Unity MCP
Après l'export d'un prefab HUD Unity par AI Studio, utilisez Cursor + Unity MCP pour abonner les événements de santé, actualiser la barre et le texte de dégâts, avec une checklist de mode Play et des correctifs courants.
- Unity MCP
- AI Studio
- HUD
- Unity
- Cursor
- AI game development
- tutorial
Le HUD est dans Unity, la barre semble correcte, mais le combat ne la fait pas bouger—généralement le prefab est correct et l’UI et le gameplay ne partagent pas les mêmes événements de santé. Le design a déjà exporté le HUD principal en tant que Canvas / Prefab depuis VberAI Studio. Le gameplay devrait utiliser Unity MCP dans le projet ouvert pour connecter les changements de PlayerHealth à un Slider / Image.fillAmount, puis vérifier en mode Play.
Cet article couvre uniquement ce câblage—pas l’export Figma ni l’installation de MCP.
| Étape | Outil | Résultat |
|---|---|---|
| Structure du HUD dans le moteur | AI Studio | Prefab HUD avec des noms stables |
| Attacher les scripts, lier les références, modifier la scène | Cursor (ou Claude Code) + Unity MCP | PlayerHealth ↔ HudHealthView |
| Accepter | Unity Play | La longueur de la barre change lors des dégâts / soins |
Liens connexes :
Accordez-vous sur les noms avant de peaufiner
Après l’export d’AI Studio, le code doit trouver la barre via le chemin ou des références sérialisées. Avant l’export (ou juste après l’import), gardez des noms stables :
| Rôle | Nom suggéré | Remarques |
|---|---|---|
| Racine du HUD | HUD_Root | Unique dans la scène |
| Remplissage de santé | HUD_HealthFill | Image (Filled) ou sous Slider.fillRect |
| Texte de valeur optionnel | HUD_HealthText | TextMeshProUGUI, par ex. 80/100 |
| Flash de dégâts optionnel | HUD_DamageFlash | Image plein écran ou bordure, transparent par défaut |
Évitez les valeurs par défaut du design comme Rectangle 42 ou Group 3—MCP et les scripts écrits à la main hériteront du désordre.
Étape 1 : Confirmez que le HUD est dans la scène
- Ouvrez la scène du joueur (par ex.
Game) - La hiérarchie devrait afficher
HUD_Root(ou votre équivalent) avec une Image / Slider de santé en dessous - Le mode de rendu du Canvas et la configuration de la caméra sont corrects (Screen Space - Overlay est le plus simple)
Test de fumée en lecture seule via MCP (ne modifiez pas la scène) :
Listez les GameObjects dans la scène active dont les noms contiennent HUD, et les types de composants UI sur eux. Ne modifiez rien.
Si la liste est vide : ré-exportez/synchronisez depuis AI Studio, ou vérifiez que le Prefab a été déposé dans la mauvaise scène.
Étape 2 : Le gameplay expose les changements de santé—ne cherchez jamais l’UI
Gardez la santé sur le joueur et diffusez avec un événement C# (ou UnityEvent). Le HUD s’abonne uniquement ; il ne doit pas piloter la logique via Find("Player").
Demandez à Unity MCP depuis Cursor (les chemins peuvent correspondre à votre projet) :
Créez Assets/Scripts/Combat/PlayerHealth.cs :
- maxHealth, currentHealth (float)
- événement Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float) ; limitez à 0..max
- Si current<=0 après les dégâts, déclenchez à nouveau OnHealthChanged et éventuellement OnDied
- Attachez au Player de la scène ; diffusez une fois dans Start
Ne modifiez aucun nœud HUD.
Implémentation de référence (générez, puis révisez) :
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);
}
}
Touche de dégâts temporaire pour le câblage (supprimez plus tard) :
Ajoutez DebugDealDamage.cs temporaire sur Player : appuyer sur H inflige 10 dégâts à PlayerHealth sur le même objet. Uniquement pour l'acceptation du câblage.
Étape 3 : La vue HUD écoute uniquement et met à jour la barre
Ajoutez un script de vue avec des références sérialisées. Ne faites pas GameObject.Find à chaque frame dans Update.
Créez Assets/Scripts/UI/HudHealthView.cs :
- Sérialisez Image healthFill (Filled, Horizontal)
- Optionnel TMP_Text healthText
- Sérialisez PlayerHealth playerHealth (ou résolvez le PlayerHealth unique à Awake)
- OnEnable s'abonne à OnHealthChanged ; OnDisable se désabonne
- Dans le callback : healthFill.fillAmount = current/max ; texte $"{current:0}/{max:0}"
- Attachez à HUD_Root ; assignez l'Image HUD_HealthFill à healthFill
- Assignez le PlayerHealth du Player à playerHealth
Référence :
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 vous vous abonnez après Start, tirez une fois ; ici on s'appuie sur 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 l’Image n’est pas Filled : demandez à MCP de définir Image Type = Filled, Fill Method = Horizontal, puis liez fillAmount. Avec un Slider, écrivez slider.value = t (minValue=0, maxValue=1)—même modèle.
Étape 4 : Laissez Unity MCP remplir les références sérialisées
Après la compilation, soyez explicite dans Cursor :
Dans la scène active :
1. Confirmez que Player a PlayerHealth ; HUD_Root a HudHealthView
2. Pointez HudHealthView.healthFill vers l'Image nommée HUD_HealthFill
3. Pointez HudHealthView.playerHealth vers le PlayerHealth du Player
4. Si HUD_HealthText existe, assignez le TMP_Text
5. Enregistrez la scène
Ensuite, listez les champs sérialisés None restants sur ces deux composants.
Vérification en lecture seule :
Inspectez les références de HudHealthView et PlayerHealth : y a-t-il des scripts manquants ou des champs None ? Rapportez uniquement—ne modifiez pas la scène.
Étape 5 : Checklist d’acceptation en mode Play
Entrez en Play et cochez toutes ces cases avant de déclarer le câblage terminé :
- À l’entrée : la barre est pleine (ou correspond à
current/max), pas vide ou obsolète - Appuyez sur H (ou frappez le joueur) :
fillAmountdiminue ; le texte se met à jour si présent - Dégâts jusqu’à 0 : barre vide ; état de mort stable ; le HUD ne s’agite pas
- Soin : la barre monte (touche temporaire ou ramassage)
- Sortez du Play et ré-entrez : les références sont toujours valides ; pas de Missing Script
Invite d’acceptation :
J'accepte le câblage du HUD en mode Play. Si la console affiche NullReferenceException, dites si c'est PlayerHealth ou HudHealthView et quel champ sérialisé est None. Diagnostiquez d'abord, proposez le correctif minimal, attendez mon OK avant de modifier.
Points de rupture courants
| Symptôme | Vérifiez d’abord |
|---|---|
| La barre ne bouge jamais en Play | OnHealthChanged non abonné ; ou les dégâts n’atteignent jamais TakeDamage |
| NRE à l’entrée en Play | healthFill / playerHealth encore None |
| Barre inversée ou saute | Image non Filled ; mauvais Rect utilisé comme remplissage |
| Texte bloqué | Mauvais TMP ; erreurs d’assets de police manquants sur le composant |
| L’IA modifie les mauvais objets | Invite : “Ne touchez qu’à HUD_Root / Player ; ne déplacez pas la géométrie du niveau” |
Règle : le gameplay change la santé ; l’UI écoute uniquement. Ne faites pas Find("HUD_HealthFill") dans PlayerCombat—le prochain renommage lors d’un ré-export d’AI Studio cassera aussi le combat.
Vivre avec les ré-exports du HUD
Lorsque le design ré-exporte depuis AI Studio :
- Conservez les noms
HUD_HealthFill/HUD_Rootsi possible - Après la ré-importation, relancez uniquement les vérifications de références de l’étape 4—ne laissez pas MCP réécrire
PlayerHealth - Conservez le script de vue dans le projet ; reliez si les références de la variante Prefab ont été effacées
Invite de limite en une ligne :
Cette passe ne corrige que les références de Prefab UI perdues. Ne modifiez aucun script de gameplay sous Assets/Scripts/Combat.
Résumé
- AI Studio livre la structure du HUD dans Unity
PlayerHealthdiffuse(current, max)HudHealthViews’abonne et met à jourfillAmount/ texte- Unity MCP attache les composants, remplit les références sérialisées, applique les correctifs Console minimaux
- Acceptez avec une touche de dégâts + checklist Play—pas “script généré avec succès”
Cela boucle une boucle reproductible : UI dans le moteur → câblage des événements → acceptation en Play. Les sacs, barres de mana et barres de boss peuvent copier le même modèle.
Poursuivre la lecture
D’autres guides qui pourraient vous intéresser
Découpage sur place VberAI : importez des images de conception d'UI de jeu dans Unity / Godot / Cocos en un clic
VberAI Studio découpe sur place les images de conception d'UI de jeu plein écran, conserve la mise en page et le dimensionnement, et exporte vers Unity, Godot et Cocos en un clic.
- vberai
- ai-studio
- inplace-slice
- game-ui
Hiérarchie des informations du HUD mobile : quoi afficher en combat, dans le lobby et dans les modales
Visibilité et priorité du HUD selon l'état de jeu ; liens avec la Safe Area, les couches de texte flottant et l'empilement des modales — tableaux plus étapes Play et validation appareil.
- game-ui-design
- game-dev-ai
- ui-to-engine
- hud
UI de jeu par IA : ne modifiez pas le YAML des Prefabs — utilisez le Canvas pour exporter vers Unity / Godot / Cocos
Pourquoi les LLM ne doivent pas lire ni écrire le YAML des Prefabs pour assembler une UI de jeu par IA. Workflow intermédiaire, export déterministe et canvas VberAI Studio de Figma / PSD vers Unity, Godot et Cocos.
- game-ui-design
- game-dev-ai
- ui-to-engine
- figma-to-unity