Menu
CoddyTech

طرق التوسعة

جزء من قسم هندسة الألعاب في 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 لا يزيلها إلا في نهاية الإطار.

challenge icon

التحدي

متوسط

أضف إلى البومة طريقتين امتداديتين.

  1. في FlatExtensions، أضف FlatDistance(this Vector3 a, Vector3 b) بصلاحية عامة وثابتة: المسافة دون احتساب الارتفاع، وهي 5 من (0, 5, 0) إلى (3, 0, 4).
  2. وبالمثل، تجعل FaceFlat(this Transform t, Vector3 target) الكائن t يلتفت حول المحور y فقط.
  3. في Owl، اجعل البومة تواجه اللاعب باستخدام FaceFlat؛ تكون eyes مضاءة عندما تكون FlatDistance أقل من sight.

اضغط «العب» وسِر أسفل البومة: ستتوهج عيناها. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;

public static class FlatExtensions
{
    // يوضع FlatDistance (Vector3) وFaceFlat (Transform) هنا
}

جميع دروس هندسة الألعاب في Unity

تدرّب بنفسك: Playground لـ Unity