Menu
CoddyTech

Genişletme Metotları

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 33 / 50.

Vector3 ve Transform, Unity'ye aittir; bu nedenle bunlara bir yöntem ekleyemezsin. Genişletme yöntemi, C#'ın sanki onlara aitmiş gibi çağırmana izin verdiği statik bir yöntemdir. Bu ikisi, 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öntemin genişletme yöntemi olması için üç şey gerekir: iç içe olmayan ve generic olmayan bir statik sınıf, statik bir yöntem ve ilk parametrenin önünde this. Bu parametre noktanın solundaki değerdir; yani transform.position.WithY(0.5f), UnityExtensions.WithY(transform.position, 0.5f) olarak derlenir. Vector3 bir struct olduğundan, 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şmanın 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 hiçbir zaman bir nesneye eklenmez. MonoBehaviour'ın miras aldığı Destroy gibi yöntemler için burada sınıfı belirtmen gerekir: Object.Destroy. foreach içinde alt öğeleri yok etmek güvenlidir, çünkü Unity bunları yalnızca karenin sonunda kaldırır.

challenge icon

Görev

Orta

Uzun bir direğin üzerindeki baykuş bahçeyi gözetliyor. Ok tuşları Player'ı hareket ettiriyor (hazır). Projeye iki genişletme metodu ekleyip bunları baykuşta kullan:

  • FlatExtensions.cs içinde FlatExtensions adlı bir statik sınıf yaz.
  • FlatDistance, Vector3'ü genişletir: a.FlatDistance(b), yükseklik farkını hesaba katmadan, zemindeki a ile b arasındaki mesafeyi döndürür. (0, 5, 0) ile (3, 0, 4) arasındaki mesafe 5'tir.
  • FaceFlat, Transform'u genişletir: t.FaceFlat(target), t'yi yalnızca y ekseni etrafında hedefe bakacak şekilde döndürür; böylece hedef ne kadar yüksekte ya da alçakta olursa olsun dik durur.
  • Owl.cs içinde baykuş her karede FaceFlat ile oyuncuya döner; oyuncu zeminde sight (3) mesafesinden daha yakındayken eyes açık, aksi takdirde kapalı olur. Baykuş direğinin tepesinde oturduğundan, burada Vector3.Distance kullanılamaz.

Oynat'a bas, direğin etrafında ve baykuşun altından yürü, ardından Kontrol Et'e bas.

Kendin dene

using UnityEngine;

// FlatExtensions: FlatDistance ve FaceFlat
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Oyun Mimarisi bölümündeki tüm dersler