Menu
CoddyTech
flag Ar iconالعربيةdown icon

أشرطة الصحة

جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 10 من 56.

الشريط الذي يفرغ هو صورة واجهة مستخدم، ويكون نوع الصورة مضبوطًا على ممتلئ. يظهر هذا الإعداد عندما يكون للصورة صورة مصدر؛ أما عند اختيار None، فيخفيه المفتش. يؤدي اختيار أفقي ضمن طريقة التعبئة، مع ضبط منشأ التعبئة على اليسار، إلى تقليص الشريط باتجاه طرفه الأيسر، ويحدد fillAmount، من 0 إلى 1، مقدار الجزء المرسوم منه. وتُظهر صورة داكنة خلفه الجزء الفارغ. يقيّد Unity قيمة fillAmount، لذا فإن 1.4 يرسم شريطًا ممتلئًا، و-0.2 يرسم شريطًا فارغًا.

تمثل fillAmount الجزء المتبقي من الصحة: الصحة مقسومة على قيمتها القصوى. عند استخدام حقول int، تكون هذه قسمة صحيحة، والناتج من 350 / 500 هو 0، لذا حوّل أحد الطرفين إلى float أولًا. يوجد Image في UnityEngine.UI. يُحدَّث شريط الزعيم هذا بعد كل ضربة:

public Image bossBar;
public int bossMaxHp = 500;
private int bossHp = 500;

public void Hit(int damage)
{
    bossHp = Mathf.Max(bossHp - damage, 0);
    bossBar.fillAmount = (float)bossHp / bossMaxHp;   // 350 / 500 = 0.7
}

يمكن أن يتغير لون الشريط أيضًا بحسب الصحة: يكون bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); أخضر عندما يكون الشريط ممتلئًا، ويتحول إلى الأحمر كلما فرغ.

challenge icon

التحدي

سهل

لدى الفارسة درع يمتص الضرر قبل أن تتأثر صحتها. تتحكم بها مفاتيح الأسهم (Mover.cs)، وتلحق بها الأشواك 30 نقطة من الضرر عندما تخطو عليها (Spikes.cs). اكتب Knight.cs؛ يربط المشهد بين healthBar وshieldBar، وهما فارغان في المشهد:

  • تبدأ hp بقيمة maxHp (80)، ويبدأ shield بقيمة maxShield (40)، ويبدأ الشريطان ممتلئين.
  • TakeDamage(int amount): يمتص الدرع من الضرر بقدر ما تبقى لديه من نقاط، ويُخصم الباقي من hp، التي لا تنخفض أبدًا عن 0.
  • بعد كل ضربة، يعرض الشريطان ما تبقى: يعرض shieldBar مقدار الدرع المتبقي من maxShield، ويعرض healthBar مقدار الصحة المتبقي من maxHp.

اضغط تشغيل، وامشِ فوق الأشواك عدة مرات، ثم اضغط تحقق.

جرّب بنفسك

using UnityEngine;
using UnityEngine.UI;

public class Knight : MonoBehaviour
{
    public Image healthBar;
    public Image shieldBar;
    public int maxHp = 80;
    public int maxShield = 40;
    private int hp;
    private int shield;

    void Start()
    {
        hp = maxHp;
        shield = maxShield;
        // املأ الشريطين
    }

    public void TakeDamage(int amount)
    {
        // يمتص الدرع ما يستطيع امتصاصه؛ ويُخصم الباقي من hp حتى يصل إلى 0. ثم اعرض الشريطين.
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس بناء ألعاب حقيقية