أشرطة الصحة
الدرس 16 من 18 في دورة لعبة Unity: الدفاع عن الأبراج على Coddy.
يُظهر شريط فوق كل عدو مقدار الصحة المتبقية لديه. في العنصر الجاهز للعدو، يتكوّن الشريط من مكعبين رفيعين: خلفية داكنة وملء أخضر أمامها. عرض الملء يساوي الصحة المتبقية مقسومة على الصحة الكاملة، أي عددًا من 0 إلى 1، وضرب المقياس على المحور x لهذا العدد يجعله أقصر. لكن المكعب يتمدّد حول مركزه، لذا سيتقلّص الملء نحو الوسط من الطرفين. يقع الملء تحت كائن pivot فارغ عند الحافة اليسرى للشريط، ويغيّر البرنامج النصي مقياس هذا المحور بدلًا من ذلك: كل ما تحته يتقلّص باتجاه تلك الحافة، ويفرغ الشريط من اليمين.
يجب حساب الكسر باستخدام أعداد عشرية. تقسم health / data.maxHealth عددين صحيحين، وتحذف C# الجزء الكسري من قسمة الأعداد الصحيحة: 6 / 9 تساوي 0، لذا سيظهر الشريط فارغًا بعد الضربة الأولى. تحويل أحد الطرفين أولًا إلى عدد عشري، (float)health / data.maxHealth، يعطي 0.67. خزان ماء يرتفع مستواه إلى الأعلى انطلاقًا من محوره عند القاع:
float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);لا يخبر الشريط الممتلئ اللاعب بأي شيء، لذا يبدأ الشريط مخفيًا: يكون غير نشط في العنصر الجاهز، وتفعّله الضربة الأولى. لا يُستدعى Update للكائن غير النشط، لكن لا يزال من الممكن استدعاء أساليبه. كل عدو نسخة مستقلة من العنصر الجاهز، وله شريطه الخاص.
التحدي
صعب- في
HealthBar، أضف Transform مُسلسَلًاfill(يُعيّن Inspector الخاصية FillPivot للشريط) وpublic void Show(float fraction)، التي تُفعّل GameObject الخاص بالشريط وتُغيّر مقياسfillبمقدارfractionعلى المحور x. - في
Enemy، أضف حقلًا مُسلسَلًاhealthBar(من نوع HealthBar). في كل مرة تُنقص فيها TakeDamage الصحة، اعرض الصحة المتبقية كنسبة منmaxHealth.
لكل prefab عدو شريطه الخاص: يكون غير نشط، ويحمل سكربت HealthBar، ويكون عنصر fill أسفل محور عند الحافة اليسرى. اضغط Play وراقب الأشرطة بينما تطلق الأبراج النار، ثم اضغط Check.
جرّب بنفسك
using UnityEngine;
// سيأتي لاحقًا: الشريط فوق العدو الذي يُظهر مقدار الصحة المتبقية لديه.
public class HealthBar : MonoBehaviour
{
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.