الصحة والضرر
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 55 من 71.
يتطلب إحداث الضرر نصين برمجيين. يوجد نص برمجي باسم Health على كل شيء يمكن أن يتعرض للضرر، وهو المسؤول عن نقاط صحته، أما ما يُلحق الضرر فيعثر على ذلك النص البرمجي ويستدعي إحدى دواله. إليك نص Health لصندوق يتحطم بعد ثلاث ضربات، ونص الأشواك التي تؤذي كل ما يسقط عليها:
public class Health : MonoBehaviour
{
[SerializeField] private int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}public class Spikes : MonoBehaviour
{
void OnCollisionEnter(Collision collision)
{
Health health = collision.gameObject.GetComponent<Health>();
if (health != null)
{
health.TakeDamage(1);
}
}
}الدالة TakeDamage هي public، لذا يمكن للنصوص البرمجية الأخرى استدعاؤها، وهي وحدها التي تغيّر قيمة hp. تستدعي الأشواك والرصاص والحمم البركانية الدالة نفسها، ولا يقرر ما تعنيه القيمة 0 إلا نص Health: تدمير الصندوق أو إنهاء اللعبة أو تشغيل رسوم متحركة للموت. يوجد كل نص برمجي في ملف مستقل يحمل اسم الصنف الذي يتبعه.
تعيد GetComponent<Health>() القيمة null للأشياء التي لا تملك Health، مثل الأرضية، لذا تتحقق الأشواك قبل الاستدعاء. تنفذ TryGetComponent(out Health health) عملية البحث والتحقق في استدعاء واحد: فهي تعيد true وتملأ health فقط عند وجوده.
التحدي
متوسطاجعل الضربات مؤثرة. Bullet جاهز ويستدعي TakeDamage(2) على ما يصيبه.
- في
Health، أكملTakeDamage(int amount): اطرحMathf.Max(amount - armor, 1)منhp. - سجّل
name + " hp: " + hp، على سبيل المثالDummy hp: 2. - عندما يصبح
hp <= 0، استدعِDestroy(gameObject);.
اضغط «العب» وأطلق النار على الدمية مرتين: سيُسجّل Dummy hp: 2، ثم تختفي. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Health : MonoBehaviour
{
[SerializeField] private int hp = 4;
[SerializeField] private int armor = 0;
public void TakeDamage(int amount)
{
// أنقص من hp قيمة amount مطروحًا منها armor (بحد أدنى 1)، وسجّل القيمة المتبقية، ودمّر الكائن عند 0
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity