أشرطة الصحة
جزء من قسم بناء ألعاب حقيقية في رحلة 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); أخضر عندما يكون الشريط ممتلئًا، ويتحول إلى الأحمر كلما فرغ.
التحدي
سهللدى الفارسة درع يمتص الضرر قبل أن تتأثر صحتها. تتحكم بها مفاتيح الأسهم (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. ثم اعرض الشريطين.
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك