طرق التوسعة
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 33 من 50.
ينتمي Vector3 وTransform إلى Unity، لذا لا يمكنك إضافة دالة إليهما. دالة الامتداد هي دالة static تتيح لك C# استدعاءها كما لو كانت تابعة لهما. هاتان الدالتان توفران أسطرًا تظهر في كل مشروع:
public static class UnityExtensions
{
public static Vector3 WithY(this Vector3 v, float y)
{
return new Vector3(v.x, y, v.z);
}
public static void DestroyChildren(this Transform parent)
{
foreach (Transform child in parent)
{
Object.Destroy(child.gameObject);
}
}
}// في أي سكربت
transform.position = transform.position.WithY(0.5f);
inventoryPanel.DestroyChildren();ثمة ثلاثة أمور تجعل الدالة دالة امتداد: صنف static غير متداخل وغير عام، ودالة static، ووجود this قبل المعامل الأول. هذا المعامل هو القيمة الواقعة على يسار النقطة، لذا يُترجم transform.position.WithY(0.5f) إلى UnityExtensions.WithY(transform.position, 0.5f). إن Vector3 بنية، لذا فإن v نسخة: لا تستطيع WithY تغيير متجه المستدعي، بل تُعيد متجهًا جديدًا بدلًا من ذلك. وهذه أيضًا طريقة للتغلب على transform.position.y = 0.5f;، التي لا تُترجم بنجاح.
الصنف static ليس MonoBehaviour. يوجد في ملف .cs مستقل، ويمكن أن يكون اسمه أي شيء، ولا يُضاف أبدًا إلى كائن. تحتاج الدوال التي يرثها MonoBehaviour، مثل Destroy، إلى تحديد صنفها هنا: Object.Destroy. من الآمن تدمير العناصر الفرعية داخل foreach، لأن Unity لا يزيلها إلا في نهاية الإطار.
التحدي
متوسطتراقب بومةٌ الساحة من فوق عمودٍ مرتفع. حرّك الأسهم اللاعب (جاهز). أضف إلى المشروع طريقتَي امتداد واستخدمهما في البومة:
- في
FlatExtensions.cs، اكتب فئة ثابتة اسمهاFlatExtensions. - توسّع
FlatDistanceالنوع Vector3: تُرجعa.FlatDistance(b)المسافة منaإلىbعبر الأرض، مع استبعاد فرق الارتفاع. من (0, 5, 0) إلى (3, 0, 4)، تكون المسافة 5. - توسّع
FaceFlatالنوع Transform: تدوّرt.FaceFlat(target)العنصرtليواجه الهدف حول المحور y فقط، ليبقى منتصبًا مهما كان ارتفاع الهدف. - في
Owl.cs، في كل إطار، تواجه البومة اللاعب باستخدام FaceFlat، وتكونeyesمفعّلة عندما يكون اللاعب أقرب منsight(3) عبر الأرض، وغير مفعّلة في غير ذلك. تجلس البومة عاليًا على عمودها، لذا لا تستخدمVector3.Distance.
اضغط Play، وامشِ حول العمود وتحته، ثم اضغط Check.
جرّب بنفسك
using UnityEngine;
// FlatExtensions: FlatDistance وFaceFlat
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس هندسة الألعاب في Unity
1المكوّنات لا التسلسلات الهرمية
مكوّنات صغيرةسكربت أساسي للعدومكوّنات مجرّدةتعمل المكوّنات معًامراجعة: برج دفاعي معياري4البيانات المتسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائم10مشروع: الناجي في الساحة
البطلأنواع الأعداء