← العودة إلى المدونة

ربط واجهة HUD بأحداث الصحة في Unity باستخدام Unity MCP

بعد تصدير AI Studio لـ HUD، استخدم Cursor وUnity MCP لربط أحداث الصحة وتحديث الشريط والنص، مع قائمة تحقق واصلاحات شائعة.

نُشر في
  • Unity MCP
  • AI Studio
  • HUD
  • Unity
  • Cursor
  • AI game development
  • tutorial

العنوان

ربط واجهة HUD بأحداث الصحة في Unity باستخدام Unity MCP

الوصف

بعد تصدير AI Studio لـ HUD، استخدم Cursor وUnity MCP لربط أحداث الصحة وتحديث الشريط والنص، مع قائمة تحقق واصلاحات شائعة.

النص

واجهة HUD موجودة في Unity، الشريط يبدو جيدًا، لكن القتال لا يحركه—عادةً البريفاب سليم والواجهة ولعبة لا تشاركان نفس أحداث الصحة. صمم المصممون HUD الرئيسي كـ Canvas / Prefab من VberAI Studio. يجب أن يستخدم اللعب Unity MCP في المشروع المفتوح لربط تغييرات PlayerHealth بـ Slider / Image.fillAmount، ثم التحقق في وضع التشغيل.

يغطي هذا المنشور هذا الربط فقط—وليس تصدير Figma أو تثبيت MCP.

الخطوةالأداةالناتج
هيكل HUD في المحركAI StudioHUD Prefab بأسماء ثابتة
إرفاق السكربتات، ربط المراجع، تعديل المشهدCursor (أو Claude Code) + Unity MCPPlayerHealth ↔ HudHealthView
القبولUnity Playيتغير طول الشريط عند الضرر / الشفاء

ذات صلة:

الاتفاق على الأسماء قبل التحسين

بعد تصدير AI Studio، يجب أن يجد الكود الشريط عبر المسار أو المراجع المسلسلة. قبل التصدير (أو بعد الاستيراد مباشرة)، حافظ على الأسماء ثابتة:

الدورالاسم المقترحملاحظات
جذر HUDHUD_Rootفريد في المشهد
تعبئة الصحةHUD_HealthFillImage (Filled) أو تحت Slider.fillRect
نص القيمة الاختياريHUD_HealthTextTextMeshProUGUI، مثل 80/100
وميض الضرر الاختياريHUD_DamageFlashImage بملء الشاشة أو الحدود، شفاف افتراضيًا

تجنب الإعدادات الافتراضية للتصميم مثل Rectangle 42 أو Group 3—سيرث كل من MCP والسكربتات المكتوبة يدويًا الفوضى.

الخطوة 1: تأكد من وجود HUD في المشهد

  1. افتح مشهد اللاعب (مثل Game)
  2. يجب أن تظهر التسلسل الهرمي HUD_Root (أو ما يعادله) مع صورة / شريط تمرير تحته
  3. إعدادات Canvas Render Mode والكاميرا صحيحة (Screen Space - Overlay هو الأبسط)

اختبار سريع للقراءة فقط عبر MCP (لا تعدل المشهد):

قائمة GameObjects في المشهد النشط التي تحتوي أسماؤها على HUD، وأنواع مكونات UI عليها. لا تعدل أي شيء.

إذا كانت القائمة فارغة: أعد التصدير/المزامنة من AI Studio، أو تحقق من إسقاط البريفاب في المشهد الخاطئ.

الخطوة 2: اللعب يكشف تغييرات الصحة—لا تبحث عن UI أبدًا

احتفظ بالصحة على اللاعب وبثها عبر حدث C# (أو UnityEvent). HUD يشترك فقط؛ يجب ألا يدفع المنطق عبر Find("Player").

اطلب من Unity MCP من Cursor (يمكن أن تتطابق المسارات مع مشروعك):

إنشاء Assets/Scripts/Combat/PlayerHealth.cs:
- maxHealth, currentHealth (float)
- event Action<float,float> OnHealthChanged(current, max)
- TakeDamage(float), Heal(float); clamp إلى 0..max
- إذا current<=0 بعد الضرر، أطلق OnHealthChanged مرة أخرى واختياريًا OnDied
- إرفاق بمشهد Player؛ بث مرة واحدة في Start
لا تعدل أي عقد HUD.

التنفيذ المرجعي (قم بإنشائه ثم راجعه):

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

مفتاح ضرر مؤقت للربط (احذفه لاحقًا):

أضف DebugDealDamage.cs مؤقتًا على Player: الضغط على H يسبب 10 ضررًا لـ PlayerHealth على نفس الكائن. قبول الربط فقط.

الخطوة 3: عرض HUD يستمع فقط ويحدث الشريط

أضف سكربت عرض بمراجع مسلسلة. لا تستخدم GameObject.Find كل إطار في Update.

إنشاء Assets/Scripts/UI/HudHealthView.cs:
- Serialize Image healthFill (Filled, Horizontal)
- اختياري TMP_Text healthText
- Serialize PlayerHealth playerHealth (أو حل PlayerHealth الفريد في Awake)
- OnEnable اشترك في OnHealthChanged؛ OnDisable ألغِ الاشتراك
- في الاستدعاء: healthFill.fillAmount = current/max; النص $"{current:0}/{max:0}"
- إرفاق بـ HUD_Root؛ عيّن HUD_HealthFill Image إلى healthFill
- عيّن Player's PlayerHealth إلى playerHealth

المرجع:

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;
        // إذا اشتركت بعد Start، اسحب مرة واحدة؛ هنا نعتمد على 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)}";
    }
}

إذا لم تكن الصورة Filled: اجعل MCP يضبط Image Type = Filled، Fill Method = Horizontal، ثم اربط fillAmount. مع Slider، اكتب slider.value = t (minValue=0, maxValue=1)—نفس النمط.

الخطوة 4: دع Unity MCP يملأ المراجع المسلسلة

بعد الترجمة، كن صريحًا في Cursor:

في المشهد النشط:
1. تأكد من أن Player لديه PlayerHealth؛ HUD_Root لديه HudHealthView
2. وجّه HudHealthView.healthFill إلى الصورة المسماة HUD_HealthFill
3. وجّه HudHealthView.playerHealth إلى Player's PlayerHealth
4. إذا كان HUD_HealthText موجودًا، عيّن TMP_Text
5. احفظ المشهد
ثم اذكر أي حقول مسلسلة None متبقية على هذين المكونين.

فحص للقراءة فقط:

افحص مراجع HudHealthView وPlayerHealth: أي سكربتات مفقودة أو حقول None؟ أبلغ فقط—لا تعدل المشهد.

الخطوة 5: قائمة تحقق قبول التشغيل

ادخل إلى Play وحدد كل هذه قبل اعتبار الربط مكتملًا:

  1. عند الدخول: الشريط ممتلئ (أو يطابق current/max)، وليس فارغًا أو قديمًا
  2. اضغط H (أو اضرب اللاعب): ينخفض fillAmount؛ يتحدث النص إذا كان موجودًا
  3. الضرر إلى 0: الشريط فارغ؛ حالة الموت مستقرة؛ HUD لا يهتز
  4. الشفاء: يرتفع الشريط (مفتاح مؤقت أو التقاط)
  5. الخروج من Play وإعادة الدخول: المراجع ما زالت صالحة؛ لا Missing Script

موجه القبول:

أنا أقبل ربط HUD في وضع Play. إذا أظهرت Console NullReferenceException، قل ما إذا كان من PlayerHealth أو HudHealthView وأي حقل مسلسل هو None. شخّص أولاً، واقترح الإصلاح الأدنى، وانتظر موافقتي قبل التعديل.

نقاط الكسر الشائعة

العرضتحقق أولاً
الشريط لا يتحرك أبدًا في PlayOnHealthChanged غير مشترك؛ أو الضرر لا يصل إلى TakeDamage
NRE عند دخول PlayhealthFill / playerHealth ما زالا None
الشريط معكوس أو يقفزالصورة ليست Filled؛ Rect خاطئ مستخدم كتعبئة
النص عالقTMP خاطئ؛ أخطاء خط مفقود على المكون
AI يعدل كائنات خاطئةموجه: “المس فقط HUD_Root / Player؛ لا تحرك هندسة المستوى”

القاعدة: اللعب يغير الصحة؛ UI يستمع فقط. لا تستخدم Find("HUD_HealthFill") داخل PlayerCombat—إعادة التصدير التالية من AI Studio ستكسر القتال أيضًا.

التعايش مع إعادة تصدير HUD

عندما يعيد التصميم التصدير من AI Studio:

  1. احتفظ بأسماء HUD_HealthFill / HUD_Root عندما يكون ذلك ممكنًا
  2. بعد إعادة الاستيراد، أعد تشغيل فحوصات المراجع في الخطوة 4 فقط—لا تدع MCP يعيد كتابة PlayerHealth
  3. احتفظ بسكربت العرض في المشروع؛ أعد الربط إذا تم مسح مراجع متغير البريفاب

موجه حد واحد:

هذه الجولة تصلح فقط مراجع UI Prefab المفقودة. لا تغير أي سكربتات لعب تحت Assets/Scripts/Combat.

الملخص

  1. AI Studio يسلم هيكل HUD إلى Unity
  2. PlayerHealth يبث (current, max)
  3. HudHealthView يشترك ويحدث fillAmount / النص
  4. Unity MCP يرفق المكونات، يملأ المراجع المسلسلة، يطبق إصلاحات Console الأدنى
  5. اقبل بمفتاح ضرر + قائمة تحقق Play—وليس “تم إنشاء السكربت بنجاح”

هذا يغلق حلقة قابلة للتكرار: UI إلى المحرك → ربط الأحداث → قبول Play. يمكن للأكياس وأشرطة المانا وأشرطة الزعماء نسخ نفس النمط.

أدلة أخرى قد تعجبك

تسلسل هرمي لمعلومات شاشة العرض (HUD) على الجوال: ماذا نعرض في القتال والردهة والنوافذ المنبثقة

رؤية وأولوية شاشة العرض حسب حالة اللعبة؛ وعلاقتها بالمنطقة الآمنة وطبقات النص العائم وتراكم النوافذ—جداول مواصفات وخطوات قبول على الجهاز.

  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • hud
اقرأ المزيد