← Kembali ke blog

Hubungkan HUD AI Studio ke Event Kesehatan dengan Unity MCP

Setelah AI Studio mengekspor prefab HUD Unity, gunakan Cursor + Unity MCP untuk berlangganan event kesehatan, memperbarui bar dan teks damage, dengan checklist Play-mode dan perbaikan umum.

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

Judul

Wire an AI Studio HUD to Health Events with Unity MCP

Deskripsi

Setelah AI Studio mengekspor prefab HUD Unity, gunakan Cursor + Unity MCP untuk berlangganan event kesehatan, memperbarui bar dan teks damage, dengan checklist Play-mode dan perbaikan umum.

Isi

HUD sudah ada di Unity, bar terlihat bagus, tetapi combat tidak menggerakkannya—biasanya prefab sudah benar dan UI dan gameplay tidak berbagi event kesehatan yang sama. Desain sudah mengekspor HUD utama sebagai Canvas / Prefab dari VberAI Studio. Gameplay harus menggunakan Unity MCP di proyek yang terbuka untuk menghubungkan perubahan PlayerHealth ke Slider / Image.fillAmount, lalu verifikasi di mode Play.

Posting ini hanya membahas wiring tersebut—bukan ekspor Figma atau instalasi MCP.

LangkahAlatHasil
Struktur HUD ke dalam engineAI StudioPrefab HUD dengan nama yang stabil
Lampirkan skrip, ikat referensi, edit sceneCursor (atau Claude Code) + Unity MCPPlayerHealth ↔ HudHealthView
TerimaUnity PlayPanjang bar berubah saat damage / heal

Terkait:

Sepakati nama sebelum poles

Setelah ekspor AI Studio, kode harus menemukan bar melalui path atau referensi serialized. Sebelum ekspor (atau tepat setelah impor), pertahankan nama yang stabil:

PeranNama yang disarankanCatatan
Akar HUDHUD_RootUnik di scene
Isi kesehatanHUD_HealthFillImage (Filled) atau di bawah Slider.fillRect
Teks nilai opsionalHUD_HealthTextTextMeshProUGUI, mis. 80/100
Flash damage opsionalHUD_DamageFlashLayar penuh atau Image border, transparan default

Hindari default desain seperti Rectangle 42 atau Group 3—baik MCP maupun skrip yang ditulis tangan akan mewarisi kekacauan.

Langkah 1: Pastikan HUD ada di scene

  1. Buka scene pemain (mis. Game)
  2. Hierarchy harus menampilkan HUD_Root (atau yang setara) dengan Image kesehatan / Slider di bawahnya
  3. Canvas Render Mode dan pengaturan kamera sudah benar (Screen Space - Overlay paling sederhana)

Tes asap read-only melalui MCP (jangan edit scene):

List GameObjects in the active scene whose names contain HUD, and the UI component types on them. Do not modify anything.

Jika daftar kosong: ekspor ulang/sinkronkan dari AI Studio, atau periksa apakah Prefab dijatuhkan ke scene yang salah.

Langkah 2: Gameplay mengekspos perubahan kesehatan—jangan pernah Find UI

Simpan kesehatan di pemain dan siarkan dengan event C# (atau UnityEvent). HUD hanya berlangganan; tidak boleh menggerakkan logika melalui Find("Player").

Minta Unity MCP dari Cursor (path dapat disesuaikan dengan proyek Anda):

Create Assets/Scripts/Combat/PlayerHealth.cs:
- maxHealth, currentHealth (float)
- event Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float); clamp to 0..max
- If current<=0 after damage, fire OnHealthChanged again and optionally OnDied
- Attach to the scene Player; broadcast once in Start
Do not modify any HUD nodes.

Implementasi referensi (buat, lalu tinjau):

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

Tombol damage sementara untuk wiring (hapus nanti):

Add temporary DebugDealDamage.cs on Player: pressing H deals 10 damage to PlayerHealth on the same object. Wiring acceptance only.

Langkah 3: View HUD hanya mendengarkan dan memperbarui bar

Tambahkan skrip view dengan referensi serialized. Jangan GameObject.Find setiap frame di Update.

Create Assets/Scripts/UI/HudHealthView.cs:
- Serialize Image healthFill (Filled, Horizontal)
- Optional TMP_Text healthText
- Serialize PlayerHealth playerHealth (or resolve the unique PlayerHealth at Awake)
- OnEnable subscribe OnHealthChanged; OnDisable unsubscribe
- In the callback: healthFill.fillAmount = current/max; text $"{current:0}/{max:0}"
- Attach to HUD_Root; assign HUD_HealthFill Image to healthFill
- Assign Player's PlayerHealth to playerHealth

Referensi:

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;
        // If you subscribe after Start, pull once; here we rely on 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 Image bukan Filled: minta MCP mengatur Image Type = Filled, Fill Method = Horizontal, lalu ikat fillAmount. Dengan Slider, tulis slider.value = t (minValue=0, maxValue=1)—pola yang sama.

Langkah 4: Biarkan Unity MCP mengisi referensi serialized

Setelah kompilasi, bersikap eksplisit di Cursor:

In the active scene:
1. Confirm Player has PlayerHealth; HUD_Root has HudHealthView
2. Point HudHealthView.healthFill at the Image named HUD_HealthFill
3. Point HudHealthView.playerHealth at Player's PlayerHealth
4. If HUD_HealthText exists, assign the TMP_Text
5. Save the scene
Then list any remaining None serialized fields on those two components.

Pemeriksaan read-only:

Inspect HudHealthView and PlayerHealth references: any missing scripts or None fields? Report only—do not edit the scene.

Langkah 5: Checklist penerimaan Play

Masuk Play dan centang semua ini sebelum menyebut wiring selesai:

  1. Saat masuk: bar penuh (atau cocok dengan current/max), tidak kosong/basi
  2. Tekan H (atau pukul pemain): fillAmount turun; teks diperbarui jika ada
  3. Damage hingga 0: bar kosong; status mati stabil; HUD tidak berkedip
  4. Heal: bar naik (tombol sementara atau pickup)
  5. Keluar Play dan masuk lagi: referensi masih valid; tidak ada Missing Script

Prompt penerimaan:

I am accepting HUD wiring in Play mode. If Console shows NullReferenceException, say whether it is PlayerHealth or HudHealthView and which serialized field is None. Diagnose first, propose the minimal fix, wait for my OK before editing.

Titik putus umum

GejalaPeriksa dulu
Bar tidak pernah bergerak di PlayOnHealthChanged tidak berlangganan; atau damage tidak pernah mencapai TakeDamage
NRE saat masuk PlayhealthFill / playerHealth masih None
Bar terbalik atau melompatImage bukan Filled; Rect yang salah digunakan sebagai isi
Teks macetTMP salah; kesalahan aset font hilang pada komponen
AI mengedit objek yang salahPrompt: “Hanya sentuh HUD_Root / Player; jangan pindahkan geometri level”

Aturan: gameplay mengubah kesehatan; UI hanya mendengarkan. Jangan Find("HUD_HealthFill") di dalam PlayerCombat—penggantian nama ekspor AI Studio berikutnya akan merusak combat juga.

Hidup dengan ekspor ulang HUD

Saat desain mengekspor ulang dari AI Studio:

  1. Pertahankan nama HUD_HealthFill / HUD_Root jika memungkinkan
  2. Setelah impor ulang, hanya jalankan ulang pemeriksaan referensi langkah 4—jangan biarkan MCP menulis ulang PlayerHealth
  3. Simpan skrip view di proyek; ikat ulang jika referensi varian Prefab dibersihkan

Prompt batas satu baris:

This pass only fixes lost UI Prefab references. Do not change any gameplay scripts under Assets/Scripts/Combat.
  1. AI Studio mengirimkan struktur HUD ke Unity
  2. PlayerHealth menyiarkan (current, max)
  3. HudHealthView berlangganan dan memperbarui fillAmount / teks
  4. Unity MCP melampirkan komponen, mengisi referensi serialized, menerapkan perbaikan Console minimal
  5. Terima dengan tombol damage + checklist Play—bukan “skrip berhasil dibuat”

Itu menutup loop yang dapat diulang: UI ke engine → wiring event → Play accept. Tas, bar mana, dan bar bos dapat menyalin pola yang sama.

Panduan lain yang mungkin Anda suka