Menu
CoddyTech

GetComponents

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 9 dari 64.

GetComponent<T>() mengembalikan kecocokan pertama. GetComponents<T>() mengembalikan setiap kecocokan pada object sebagai array, sedangkan GetComponentsInChildren<T>() mengembalikan setiap kecocokan pada object dan semua object di bawahnya. Dengan interface sebagai T, satu pemanggilan mengumpulkan setiap bagian yang dapat melakukan sesuatu, apa pun class-nya. Di sini, mesin-mesin di sebuah pabrik merupakan anak dari object Factory, dan setiap bagian yang berjalan 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 yang 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 melewati anak-anak yang tidak aktif kecuali kamu memberikan true: GetComponentsInChildren<IPowered>(true). GetComponents hanya memeriksa satu object, cocok untuk bagian-bagian yang berdampingan, seperti lampu dan buzzer pada satu pintu.

challenge icon

Tantangan

Mudah

Biarkan setiap bagian robot menunjukkan saat terkena serangan.

  1. Di IHitReaction.cs, deklarasikan public interface IHitReaction dengan void React(int damage);.
  2. Buat Flash, Recoil, dan Sparks mengimplementasikannya: ubah nama setiap method menjadi public void React(int damage).
  3. Recoil bergerak mundur sejauh 0.5f * damage, sedangkan Sparks mengeluarkan damage percikan.
  4. Di TakeDamage, panggil React(amount) pada setiap GetComponentsInChildren<IHitReaction>(), lalu catat Reactions: 3 (jumlahnya).

Tekan tombol “Main”, tekan Space, lalu klik. Setelah itu, tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;

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

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

Semua pelajaran di Arsitektur Game di Unity

Latihan sendiri: Playground Unity