أشرطة الصحة
الدرس 22 من 25 في دورة لعبة 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، أضف[SerializeField] private Transform fill;وpublic void Show(float fraction): فعّل الشريط واضبطfill.localScale = new Vector3(fraction, 1f, 1f);. - في
Enemy، أضف[SerializeField] private HealthBar healthBar;؛ وبعد أن تخصمTakeDamageالصحة، استدعِhealthBar.Show((float)health / data.maxHealth);.
اضغط على «العب»: ستظهر الأشرطة وتنكمش مع إصابة الأبراج للأعداء. ثم اضغط على «تحقق».
جرّب بنفسك
using UnityEngine;
// يأتي لاحقًا: الشريط فوق العدو الذي يُظهر مقدار الصحة المتبقية لديه.
public class HealthBar : MonoBehaviour
{
}
جميع دروس لعبة Unity: الدفاع عن الأبراج
تدرّب بنفسك: Playground لـ Unity