Extension method
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 33 dari 50.
Vector3 dan Transform berasal dari Unity, jadi kamu tidak bisa menambahkan method ke keduanya. Extension method adalah method static yang dapat kamu panggil seolah-olah method itu milik keduanya, berkat C#. 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 membuat sebuah extension method: class static yang tidak bersarang dan bukan generic, method static, serta 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 merupakan salinan: WithY tidak dapat mengubah vector milik pemanggil dan justru mengembalikan vector baru. Cara ini juga mengatasi masalah pada transform.position.y = 0.5f;, yang tidak dapat dikompilasi.
Class static ini bukan MonoBehaviour. Class ini berada dalam file .cs tersendiri, namanya bebas, dan tidak pernah dipasang pada object. Method yang diwarisi MonoBehaviour, seperti Destroy, perlu menyebutkan class-nya di sini: Object.Destroy. Menghancurkan child di dalam foreach aman, karena Unity baru menghapusnya pada akhir frame.
Tantangan
SedangSeekor burung hantu di atas tiang tinggi mengawasi halaman. Panah-panah menggerakkan Player (siap). Tambahkan dua method ekstensi ke proyek dan gunakan keduanya pada burung hantu:
- Di
FlatExtensions.cs, tulis class statisFlatExtensions. FlatDistancememperluas Vector3:a.FlatDistance(b)mengembalikan jarak dariakebdi permukaan tanah, tanpa memperhitungkan perbedaan ketinggian. Dari (0, 5, 0) ke (3, 0, 4), jaraknya 5.FaceFlatmemperluas Transform:t.FaceFlat(target)memutartagar menghadap target hanya pada sumbu y, sehingga tetap tegak setinggi atau serendah apa pun targetnya.- Di
Owl.cs, setiap frame, burung hantu menghadap pemain dengan FaceFlat, daneyes-nya menyala saat pemain berada lebih dekat daripadasight(3) jika diukur di permukaan tanah, dan mati jika tidak. Burung hantu bertengger tinggi di tiangnya, jadi gunakan cara selainVector3.Distance.
Tekan Mainkan, berjalanlah mengitari tiang dan melewati bawah burung hantu, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
// FlatExtensions: FlatDistance dan FaceFlat
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja SamaRingkasan: Turret Modular5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest