Menu
CoddyTech

GetComponents

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 8 dari 50.

GetComponent<T>() mengembalikan kecocokan pertama. GetComponents<T>() mengembalikan semua kecocokan pada object sebagai array, sedangkan GetComponentsInChildren<T>() mengembalikan semua kecocokan pada object dan semua yang berada di bawahnya. Dengan interface sebagai T, satu pemanggilan mengumpulkan setiap bagian yang bisa melakukan sesuatu, apa pun class-nya. Di sini, mesin-mesin pabrik merupakan child dari object Factory, dan setiap bagian yang beroperasi dengan daya mengimplementasikan 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 menyalakan Light-nya, Fan mulai berputar, dan Conveyor mulai bergerak, masing-masing melalui SetPower-nya sendiri. Mesin dengan Lamp dan Fan pada satu object dihitung dua kali karena setiap komponen merupakan kecocokan terpisah. Generator tidak pernah menyebut nama mereka, jadi Siren yang mengimplementasikan IPowered dan ditambahkan di bawah Factory nanti akan dinyalakan oleh Switch berikutnya.

GetComponentsInChildren menyertakan object tempat kamu memanggilnya, dan melewatkan child yang tidak aktif kecuali kamu meneruskan true: GetComponentsInChildren<IPowered>(true). GetComponents hanya memeriksa satu object, cocok untuk bagian-bagian yang terpasang berdampingan, seperti lampu dan buzzer pada satu pintu.

challenge icon

Tantangan

Mudah

Robot latihan harus menampilkan setiap serangan. Health.cs pada Robot menghitung hp, dan tiga bagian dapat bereaksi: Flash pada Head membuatnya merah, Recoil pada Robot menyentakkannya ke belakang, dan Sparks pada Antenna melemparkan percikan. Space menyerang robot dengan kekuatan 1 dan klik menyerangnya dengan kekuatan 2 (Trainer.cs sudah siap). Saat ini, Health hanya memberi tahu bagian kepala.

  • Di IHitReaction.cs, deklarasikan sebuah antarmuka IHitReaction dengan satu method, void React(int damage).
  • Buat Flash, Recoil, dan Sparks mengimplementasikannya: method masing-masing menjadi React(int damage). Flash melakukan hal yang sama seperti sebelumnya. Recoil menyentakkan robot ke belakang sejauh 0.5 unit (+z) per poin kerusakan, dan Sparks melemparkan satu percikan per poin kerusakan.
  • Di dalam TakeDamage milik Health, setelah hp berkurang, panggil React(amount) pada setiap IHitReaction di Robot dan anak-anaknya, yang ditemukan dengan satu pemanggilan GetComponentsInChildren, lalu catat jumlah yang bereaksi sebagai Reactions: 3.

Tekan Play, serang robot dengan Space dan klik, lalu tekan Check.

Coba sendiri

using UnityEngine;

public class Health : MonoBehaviour
{
    public int hp = 10;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        GetComponentInChildren<Flash>().Show();
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Arsitektur Game di Unity