← Kembali ke blog

Sambungkan HUD AI Studio ke Acara Kesihatan dengan Unity MCP

Selepas AI Studio mengeksport prefab HUD Unity, gunakan Cursor + Unity MCP untuk melanggan acara kesihatan, segar semula bar dan teks kerosakan, dengan senarai semak mod Main dan pembaikan titik putus biasa.

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

Tajuk

Sambungkan HUD AI Studio ke Acara Kesihatan dengan Unity MCP

Penerangan

Selepas AI Studio mengeksport prefab HUD Unity, gunakan Cursor + Unity MCP untuk melanggan acara kesihatan, segar semula bar dan teks kerosakan, dengan senarai semak mod Main dan pembaikan titik putus biasa.

Kandungan

HUD berada dalam Unity, bar kelihatan baik, tetapi pertempuran tidak menggerakkannya—biasanya prefab itu baik dan UI dan permainan tidak berkongsi acara kesihatan yang sama. Pereka telah mengeksport HUD utama sebagai Canvas / Prefab dari VberAI Studio. Permainan harus menggunakan Unity MCP dalam projek terbuka untuk menyambungkan perubahan PlayerHealth ke Slider / Image.fillAmount, kemudian sahkan dalam mod Main.

Siaran ini hanya merangkumi pendawaian itu—bukan eksport Figma atau pemasangan MCP.

LangkahAlatOutput
Struktur HUD ke dalam enjinAI StudioPrefab HUD dengan nama yang stabil
Lampirkan skrip, ikat rujukan, edit adeganCursor (atau Claude Code) + Unity MCPPlayerHealth ↔ HudHealthView
TerimaUnity PlayPanjang bar berubah pada kerosakan / penyembuhan

Berkaitan:

Sepakat pada nama sebelum menggilap

Selepas eksport AI Studio, kod mesti mencari bar melalui laluan atau rujukan bersiri. Sebelum eksport (atau selepas import), kekalkan nama yang stabil:

PerananNama yang dicadangkanNota
Akar HUDHUD_RootUnik dalam adegan
Isi kesihatanHUD_HealthFillImage (Filled) atau di bawah Slider.fillRect
Teks nilai pilihanHUD_HealthTextTextMeshProUGUI, contohnya 80/100
Kilat kerosakan pilihanHUD_DamageFlashImej skrin penuh atau sempadan, lutsinar secara lalai

Elakkan lalai reka bentuk seperti Rectangle 42 atau Group 3—kedua-dua MCP dan skrip tulisan tangan akan mewarisi kekacauan itu.

Langkah 1: Sahkan HUD berada dalam adegan

  1. Buka adegan pemain (contohnya Game)
  2. Hierarki harus menunjukkan HUD_Root (atau yang setara) dengan Imej / Slider kesihatan di bawahnya
  3. Mod Render Kanvas dan persediaan kamera betul (Screen Space - Overlay adalah paling mudah)

Ujian asap baca sahaja melalui MCP (jangan edit adegan):

Senaraikan GameObject dalam adegan aktif yang namanya mengandungi HUD, dan jenis komponen UI padanya. Jangan ubah suai apa-apa.

Jika senarai kosong: eksport semula/selaraskan dari AI Studio, atau periksa bahawa Prefab dijatuhkan ke adegan yang salah.

Langkah 2: Permainan mendedahkan perubahan kesihatan—jangan cari UI

Simpan kesihatan pada pemain dan siarkan dengan acara C# (atau UnityEvent). HUD hanya melanggan; ia tidak boleh memacu logik melalui Find("Player").

Minta Unity MCP dari Cursor (laluan boleh sepadan dengan projek anda):

Buat Assets/Scripts/Combat/PlayerHealth.cs:
- maxHealth, currentHealth (float)
- acara Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float); clamp ke 0..max
- Jika current<=0 selepas kerosakan, pancarkan OnHealthChanged sekali lagi dan pilihan OnDied
- Lampirkan ke Player dalam adegan; siarkan sekali dalam Start
Jangan ubah suai mana-mana nod HUD.

Rujukan pelaksanaan (jana, kemudian semak):

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

Kunci kerosakan sementara untuk pendawaian (padam kemudian):

Tambah DebugDealDamage.cs sementara pada Player: menekan H menyebabkan 10 kerosakan kepada PlayerHealth pada objek yang sama. Penerimaan pendawaian sahaja.

Langkah 3: Paparan HUD hanya mendengar dan mengemas kini bar

Tambah skrip paparan dengan rujukan bersiri. Jangan GameObject.Find setiap bingkai dalam Update.

Buat Assets/Scripts/UI/HudHealthView.cs:
- Serialize Image healthFill (Filled, Horizontal)
- Pilihan TMP_Text healthText
- Serialize PlayerHealth playerHealth (atau selesaikan PlayerHealth unik pada Awake)
- OnEnable langgan OnHealthChanged; OnDisable batalkan langganan
- Dalam callback: healthFill.fillAmount = current/max; teks $"{current:0}/{max:0}"
- Lampirkan ke HUD_Root; tetapkan Imej HUD_HealthFill ke healthFill
- Tetapkan PlayerHealth pemain ke playerHealth

Rujukan:

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;
        // Jika anda melanggan selepas Start, tarik sekali; di sini kita bergantung pada 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)}";
    }
}

Jika Imej tidak Filled: minta MCP menetapkan Image Type = Filled, Fill Method = Horizontal, kemudian ikat fillAmount. Dengan Slider, tulis slider.value = t (minValue=0, maxValue=1)—corak yang sama.

Langkah 4: Biarkan Unity MCP mengisi rujukan bersiri

Selepas kompilasi, bersikap jelas dalam Cursor:

Dalam adegan aktif:
1. Sahkan Player mempunyai PlayerHealth; HUD_Root mempunyai HudHealthView
2. Tunjuk HudHealthView.healthFill ke Imej bernama HUD_HealthFill
3. Tunjuk HudHealthView.playerHealth ke PlayerHealth Player
4. Jika HUD_HealthText wujud, tetapkan TMP_Text
5. Simpan adegan
Kemudian senaraikan sebarang medan bersiri None yang tinggal pada dua komponen itu.

Semakan baca sahaja:

Periksa rujukan HudHealthView dan PlayerHealth: sebarang skrip hilang atau medan None? Laporkan sahaja—jangan edit adegan.

Langkah 5: Senarai semak penerimaan Play

Masuk Play dan tandakan semua ini sebelum memanggil pendawaian selesai:

  1. Sebaik masuk: bar penuh (atau sepadan dengan current/max), tidak kosong/basi
  2. Tekan H (atau pukul pemain): fillAmount menurun; teks dikemas kini jika ada
  3. Kerosakan ke 0: bar kosong; keadaan mati stabil; HUD tidak berombak
  4. Sembuh: bar naik (kunci sementara atau pickup)
  5. Keluar Play dan masuk semula: rujukan masih sah; tiada Missing Script

Prompt penerimaan:

Saya menerima pendawaian HUD dalam mod Play. Jika Konsol menunjukkan NullReferenceException, nyatakan sama ada ia PlayerHealth atau HudHealthView dan medan bersiri mana yang None. Diagnosa dahulu, cadangkan pembaikan minimum, tunggu OK saya sebelum mengedit.

Titik putus biasa

GejalaPeriksa dahulu
Bar tidak pernah bergerak dalam PlayOnHealthChanged tidak dilanggan; atau kerosakan tidak pernah mencapai TakeDamage
NRE pada masuk PlayhealthFill / playerHealth masih None
Bar terbalik atau melonjakImej tidak Filled; Rect salah digunakan sebagai isi
Teks tersekatTMP salah; ralat aset fon hilang pada komponen
AI mengedit objek yang salahPrompt: “Hanya sentuh HUD_Root / Player; jangan gerakkan geometri tahap”

Peraturan: permainan menukar kesihatan; UI hanya mendengar. Jangan Find("HUD_HealthFill") di dalam PlayerCombat—eksport semula AI Studio seterusnya yang menamakan semula akan memecahkan pertempuran juga.

Hidup dengan eksport semula HUD

Apabila pereka mengeksport semula dari AI Studio:

  1. Kekalkan nama HUD_HealthFill / HUD_Root apabila mungkin
  2. Selepas import semula, hanya jalankan semula semakan rujukan langkah 4—jangan biarkan MCP menulis semula PlayerHealth
  3. Kekalkan skrip paparan dalam projek; ikat semula jika rujukan varian Prefab dibersihkan

Prompt sempadan satu baris:

Laluan ini hanya membaiki rujukan Prefab UI yang hilang. Jangan ubah sebarang skrip permainan di bawah Assets/Scripts/Combat.
  1. AI Studio menyampaikan struktur HUD ke Unity
  2. PlayerHealth menyiarkan (current, max)
  3. HudHealthView melanggan dan mengemas kini fillAmount / teks
  4. Unity MCP melampirkan komponen, mengisi rujukan bersiri, menggunakan pembaikan Konsol minimum
  5. Terima dengan kunci kerosakan + senarai semak Play—bukan “skrip berjaya dijana”

Itu menutup gelung berulang: UI ke enjin → pendawaian acara → terima Play. Beg, bar mana, dan bar bos boleh menyalin corak yang sama.

Panduan lain yang mungkin anda suka