دوال مساعدة عامة
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 44 من 64.
بعض الدوال المساعدة واحدة لكل الأنواع: الحصول على مكوّن أو إضافته، واختيار عنصر عشوائي من مصفوفة. تكتبها دالة عامة مرة واحدة، مع النوع كمعامل T تحدده كل استدعاء:
public static class Helpers
{
public static T GetOrAdd<T>(this GameObject go) where T : Component
{
if (!go.TryGetComponent(out T found)) found = go.AddComponent<T>();
return found;
}
public static T RandomItem<T>(T[] items)
{
return items[Random.Range(0, items.Length)];
}
}Rigidbody body = crate.GetOrAdd<Rigidbody>();
Color paint = Helpers.RandomItem(colors);
GameObject enemy = Helpers.RandomItem(enemyPrefabs);where T : Component هو تعهّد بشأن T، وهو يحدد ما يمكن للدالة فعله به. لا يقبل AddComponent إلا المكوّنات، لذا من دون القيد يرفض المترجم go.AddComponent<T>()؛ ومعه، يعمل أي مكوّن، سواء كان Rigidbody من Unity أو أحد السكربتات التي كتبتها. كما يتيح لك القيد الوصول إلى جميع أعضاء Component على T، مثل .transform و.gameObject. إذا كان لدى الصندوق Rigidbody بالفعل، فستحصل على ذلك المكوّن نفسه، ولن تتم إضافة أي شيء.
لا يتضمن RandomItem أي قيد، لأنه لا يتعامل مع T مطلقًا: فهو يعمل مع الألوان والسلاسل النصية والعناصر الأولية على حد سواء. نادرًا ما تكتب النوع عند الاستدعاء: انطلاقًا من colors، وهي مصفوفة من نوع Color[]، يستنتج المترجم أن T هو Color. أما الدالة التي تأخذ IEnumerable<T> بدلًا من T[] فتقبل المصفوفات والقوائم معًا، بما فيها المصفوفات التي تعيدها FindObjectsByType<T>.
التحدي
متوسطاكتب دالة مساعدة عامة واحدة لصناديق برج الصدمات ومصابيحه.
- في
Helpers.cs، اكتب الصنف الساكنHelpersمع الدالة العامةInRange<T>(IEnumerable<T> items, Vector3 center, float range)للمكوّنات: قائمةList<T>بالعناصر التي لا تتجاوز المسافة إليهاrange. - في
Pulse، عند الضغط على Space، امنح كلRigidbodyضمن النطاق دفعةً إلى الأعلى بمقدارlift. - ثم استدعِ
TurnOn()لكلLampضمن النطاق.
اضغط «العب» ثم اضغط Space: سيقفز الصندوق القريب. ثم اضغط «تحقق».
جرّب بنفسك
using System.Collections.Generic;
using UnityEngine;
// Helpers.InRange<T>: العناصر الواقعة ضمن نطاق نقطة
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاقتدرّب بنفسك: Playground لـ Unity