طرق التوسعة
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 42 من 64.
ينتمي Vector3 وTransform إلى Unity، لذا لا يمكنك إضافة طريقة إليهما. طريقة الامتداد هي طريقة ثابتة تتيح لك 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();هناك ثلاثة أمور تجعل الطريقة طريقة امتداد: فئة ثابتة ليست متداخلة ولا عامة، وطريقة ثابتة، ووجود this قبل المعامل الأول. ذلك المعامل هو القيمة الموجودة على يسار النقطة، لذا تُترجم transform.position.WithY(0.5f) إلى UnityExtensions.WithY(transform.position, 0.5f). إن Vector3 بنية، لذا فإن v نسخة: لا تستطيع WithY تغيير متجه المستدعي، وتُعيد متجهًا جديدًا بدلًا من ذلك. وبهذه الطريقة أيضًا تتجاوز transform.position.y = 0.5f;، التي لا تُترجم.
الفئة الثابتة ليست MonoBehaviour. توضع في ملف .cs خاص بها، ويمكن أن يكون اسم الملف أي شيء، ولا تُضاف أبدًا إلى كائن. الطرق التي ترثها MonoBehaviour، مثل Destroy، تحتاج إلى الفئة هنا: Object.Destroy. من الآمن تدمير العناصر الفرعية داخل foreach، لأن Unity لا يزيلها إلا في نهاية الإطار.
التحدي
متوسطأضف إلى البومة طريقتين امتداديتين.
- في
FlatExtensions، أضفFlatDistance(this Vector3 a, Vector3 b)بصلاحية عامة وثابتة: المسافة دون احتساب الارتفاع، وهي5من (0, 5, 0) إلى (3, 0, 4). - وبالمثل، تجعل
FaceFlat(this Transform t, Vector3 target)الكائنtيلتفت حول المحور y فقط. - في
Owl، اجعل البومة تواجه اللاعب باستخدام FaceFlat؛ تكونeyesمضاءة عندما تكون FlatDistance أقل منsight.
اضغط «العب» وسِر أسفل البومة: ستتوهج عيناها. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public static class FlatExtensions
{
// يوضع FlatDistance (Vector3) وFaceFlat (Transform) هنا
}
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاقتدرّب بنفسك: Playground لـ Unity