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.
Tantangan
SedangBerikan burung hantu dua extension method.
- Di
FlatExtensions, tambahkanpublic staticFlatDistance(this Vector3 a, Vector3 b): jarak tanpa menghitung ketinggian,5dari (0, 5, 0) ke (3, 0, 4). - Demikian pula,
FaceFlat(this Transform t, Vector3 target)memutarthanya pada sumbu y. - Di
Owl, hadapkan burung hantu ke pemain dengan FaceFlat;eyesmenyala saat FlatDistance kurang darisight.
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
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja BersamaRangkuman: Turret ModularRangkuman: Meriam Kembar4Data yang Diserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRangkuman: Tabel LootRangkuman: Acak Loot2Antarmuka di Unity
IDamageableAntarmuka dan TryGetComponentGetComponentsRingkasan: Tombol InteractRingkasan: Terdekat dalam Jangkauan5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaSelamatkan AnginGelombang sebagai DataRekap: database ItemBeli dari Toko8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearestLatihan sendiri: Playground Unity