Menu
CoddyTech

Extension method

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

Vector3 dan Transform adalah bagian dari Unity, jadi kamu tidak dapat menambahkan method ke dalamnya. Metode ekstensi adalah method statis yang dapat kamu panggil seolah-olah method itu milik Vector3 dan Transform. Dua method ini menghemat baris kode yang selalu muncul di setiap proyek:

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);
        }
    }
}
// di script mana pun
transform.position = transform.position.WithY(0.5f);
inventoryPanel.DestroyChildren();

Ada tiga hal yang membentuk metode ekstensi: class statis yang tidak bersarang maupun generik, method statis, dan this sebelum parameter pertama. Parameter itu adalah nilai di sebelah kiri titik, jadi transform.position.WithY(0.5f) dikompilasi menjadi UnityExtensions.WithY(transform.position, 0.5f). Vector3 adalah struct, jadi v adalah salinan: WithY tidak dapat mengubah vektor pemanggil dan sebagai gantinya mengembalikan vektor baru. Dengan cara itu, metode ini juga mengatasi transform.position.y = 0.5f;, yang tidak dapat dikompilasi.

Class statis ini bukan MonoBehaviour. Class ini berada dalam file .cs tersendiri, namanya bebas, dan tidak pernah ditambahkan ke objek. Method yang diwarisi MonoBehaviour, seperti Destroy, memerlukan class-nya di sini: Object.Destroy. Menghancurkan child di dalam foreach aman, karena Unity menghapusnya hanya pada akhir frame.

challenge icon

Tantangan

Sedang

Berikan burung hantu dua extension method.

  1. Di FlatExtensions, tambahkan public static FlatDistance(this Vector3 a, Vector3 b): jarak tanpa menghitung ketinggian, 5 dari (0, 5, 0) ke (3, 0, 4).
  2. Demikian pula, FaceFlat(this Transform t, Vector3 target) memutar t hanya pada sumbu y.
  3. Di Owl, hadapkan burung hantu ke pemain dengan FaceFlat; eyes menyala saat FlatDistance kurang dari sight.

Tekan tombol “Main” lalu berjalanlah di bawah burung hantu: matanya menyala. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;

public static class FlatExtensions
{
    // FlatDistance (Vector3) dan FaceFlat (Transform) diletakkan di sini
}

Semua pelajaran di Arsitektur Game di Unity

Latihan sendiri: Playground Unity