Genişletme Metotları
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 42 / 64.
Vector3 ve Transform, Unity'ye aittir; bu yüzden bunlara yöntem ekleyemezsin. Uzantı yöntemi, C#'ın sanki bu türlere aitmiş gibi çağırmana izin verdiği statik bir yöntemdir. Bu iki yöntem, her projede karşına çıkan satırları azaltır:
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);
}
}
}// herhangi bir betikte
transform.position = transform.position.WithY(0.5f);
inventoryPanel.DestroyChildren();Bir yöntemi uzantı yöntemi yapan üç şey vardır: iç içe olmayan ve genel olmayan statik bir sınıf, statik bir yöntem ve ilk parametreden önce gelen this. Bu parametre, noktanın solundaki değerdir; bu nedenle transform.position.WithY(0.5f), UnityExtensions.WithY(transform.position, 0.5f) olarak derlenir. Vector3 bir yapıdır, dolayısıyla v bir kopyadır: WithY, çağıranın vektörünü değiştiremez ve bunun yerine yeni bir vektör döndürür. transform.position.y = 0.5f; ifadesinin derlenmemesini aşma yolu da budur.
Statik sınıf bir MonoBehaviour değildir. Kendine ait bir .cs dosyasında bulunur; dosyanın adı herhangi bir şey olabilir ve sınıf hiçbir zaman bir nesneye eklenmez. Destroy gibi bir MonoBehaviour'un devraldığı yöntemler, burada sınıfıyla birlikte kullanılmalıdır: Object.Destroy. foreach içinde çocukları yok etmek güvenlidir; çünkü Unity onları yalnızca karenin sonunda kaldırır.
Görev
OrtaBaykuşa iki genişletme yöntemi ekle.
FlatExtensionsiçinde herkese açık statikFlatDistance(this Vector3 a, Vector3 b)ekle: yükseklik hesaba katılmadan alınan mesafe; (0, 5, 0) noktasından (3, 0, 4) noktasına5.- Benzer şekilde,
FaceFlat(this Transform t, Vector3 target),tnesnesini yalnızca y ekseni etrafında döndürür. Owliçinde, oyuncuya FaceFlat ile dön; FlatDistance değerisightdeğerinin altındaykeneyesaçık olsun.
“Oyna” düğmesine bas ve baykuşun altından yürü: gözleri parlar. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
public static class FlatExtensions
{
// FlatDistance (Vector3) ve FaceFlat (Transform) buraya gelir
}
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground