GetComponents
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 9 من 64.
تعيد GetComponent<T>() أول تطابق. وتعيد GetComponents<T>() كل تطابق على الكائن في صورة مصفوفة، بينما تعيد GetComponentsInChildren<T>() كل تطابق على الكائن وفي كل ما يقع تحته. عند استخدام واجهة بوصفها T، يجمع استدعاء واحد كل جزء قادر على أداء مهمة، أيًّا كانت فئته. هنا، تكون آلات المصنع أبناءً للكائن Factory، وكل جزء يعمل بالطاقة يطبّق IPowered:
public interface IPowered
{
void SetPower(bool on);
}public class Generator : MonoBehaviour
{
public GameObject factory;
public void Switch(bool on)
{
IPowered[] parts = factory.GetComponentsInChildren<IPowered>();
foreach (IPowered part in parts)
{
part.SetPower(on);
}
Debug.Log(parts.Length + " parts powered");
}
}يبدّل Lamp حالة Light، ويبدأ Fan بالدوران، ويبدأ Conveyor بالحركة، وكلٌّ منها يفعل ذلك في SetPower الخاص به. تُحتسب الآلة التي تضم Lamp وFan على كائن واحد مرتين، لأن كل مكوّن يُعدّ تطابقًا مستقلًا. لا يذكر Generator أسماءها مطلقًا، لذا فإن Siren التي تطبّق IPowered، إذا أُضيفت تحت Factory لاحقًا، ستُشغَّل عند استدعاء Switch التالي.
يشمل GetComponentsInChildren الكائن الذي تستدعيه عليه، ويتجاوز أبناءه غير النشطين ما لم تمرّر true: GetComponentsInChildren<IPowered>(true). أما GetComponents فيفحص الكائن الواحد فقط، وهذا يناسب الأجزاء المتجاورة، مثل مصباح وجرس على الباب نفسه.
التحدي
سهلاجعل كل جزء من الروبوت يُظهر تعرّضه لضربة.
- في
IHitReaction.cs، عرّفpublic interface IHitReactionمعvoid React(int damage);. - اجعل
FlashوRecoilوSparksتنفّذ هذه الواجهة: أعد تسمية كل دالة إلىpublic void React(int damage). - تحرّك
Recoilإلى الخلف بمقدار0.5f * damage؛ وتقذفSparksعددًا من الشرارات يساويdamage. - في
TakeDamage، استدعِReact(amount)على كل عنصر منGetComponentsInChildren<IHitReaction>()، ثم سجّلReactions: 3(عددها).
اضغط «العب»، ثم اضغط على Space، ثم انقر. بعد ذلك اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Health : MonoBehaviour
{
public int hp = 10;
public void TakeDamage(int amount)
{
hp -= amount;
GetComponentInChildren<Flash>().Show();
}
}
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاقتدرّب بنفسك: Playground لـ Unity