Menu
CoddyTech

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.

challenge icon

Görev

Orta

Baykuşa iki genişletme yöntemi ekle.

  1. FlatExtensions içinde herkese açık statik FlatDistance(this Vector3 a, Vector3 b) ekle: yükseklik hesaba katılmadan alınan mesafe; (0, 5, 0) noktasından (3, 0, 4) noktasına 5.
  2. Benzer şekilde, FaceFlat(this Transform t, Vector3 target), t nesnesini yalnızca y ekseni etrafında döndürür.
  3. Owl içinde, oyuncuya FaceFlat ile dön; FlatDistance değeri sight değerinin altındayken eyes açı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

Kendi başına pratik yap: Unity playground