Menu
CoddyTech

Serileştirilebilir Sınıflar

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

Çok sayıda ayarı olan bir betik, Inspector'da uzun ve düz bir liste oluşturur. Düz bir C# sınıfı bunları gruplandırabilir: sınıfı [System.Serializable] olarak işaretleyin; bu sınıfın bir alanı, alanın adını taşıyan ve içinde sınıfın alanlarının yer aldığı bir açılır bölüm olarak görünür. Bir sınıf, birden fazla alana ve birden fazla betiğe hizmet edebilir:

[System.Serializable]
public class Stats
{
    public float speed = 2f;
    public int damage = 10;
}

public class Enemy : MonoBehaviour
{
    public Stats normal;
    public Stats enraged;
    private Stats current;

    void Start()
    {
        current = normal;
    }

    void Update()
    {
        transform.Translate(0f, 0f, current.speed * Time.deltaTime);
    }

    public void Enrage()
    {
        current = enraged;
    }
}

Inspector'da her biri Speed ve Damage içeren iki açılır bölüm, Normal ve Enraged, görünür. Her Enemy'nin kendi Inspector'ında doldurulan iki ayrı Stats nesnesi olur ve kod bunları normal.speed şeklinde okur. Unity, betiği yüklediğinde bu nesneleri oluşturur; bu yüzden normal, = new Stats() olmadan da hiçbir zaman null olmaz ve alan başlatıcıları (2 ve 10), yeni bir Enemy'nin başlangıç değerleridir. Bir struct da aynı öznitelikle aynı şekilde çalışır: [System.Serializable] public struct Range { public float min; public float max; }; Vector3 gibi, atandığında kopyalanır.

Bu öznitelik gereklidir çünkü Unity yalnızca kendisine söylenen türleri kaydeder. Bu öznitelik olmadan sınıf Inspector'da görünmez: açılır bölüm olmaz, orada ayarlanan değerler kaydedilmez ve Unity nesneyi oluşturmaz; dolayısıyla normal.speed bir NullReferenceException hatası verir. Sınıfın içinde olağan Inspector kuralları geçerlidir: public alanlar veya [SerializeField] ile işaretlenmiş private alanlar kullanın; asla özellikleri veya static alanları kullanmayın.

challenge icon

Görev

Kolay

Kaşifin el fenerinin iki ışın modu vardır ve Boşluk tuşu bunlar arasında geçiş yapar: çevreyi görmek için geniş, sıcak bir ışın ve mağaranın derinliklerine ulaşan odaklanmış, soğuk beyaz bir ışın. Flashlight.cs, her ışın modunun üç ayarını altı ayrı alanda tutuyor. Sahne, ayarlar her ışın modu için gruplanmış olacak şekilde zaten hazırlandı ve betiğin buna uyması gerekiyor:

  • Üç genel alanı olan bir Beam yapısı tanımla: color (bir Color), range ve angle (float değerleri). Inspector'da görünmesi gerekiyor.
  • Altı ayrı alanı, wide ve focused adlı iki Beam alanıyla değiştir. Sahne, wide için sıcak bir renk, range 6 ve angle 80; focused için soğuk beyaz, range 15 ve angle 25 ayarlarını yapıyor.
  • Apply() metodunun geçerli ışın modunun Beam değerini okumasını ve Light'ın color, range ve spotAngle değerlerini bu değerlerden ayarlamasını sağla. Diğer her şey aynı kalıyor: el feneri geniş ışın moduyla başlıyor ve Boşluk tuşu ışın modları arasında geçiş yapıyor.

Play'e bas, mağaranın uzak ucunu aydınlatmak için Boşluk tuşuna bas, ardından Check'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.InputSystem;

public class Flashlight : MonoBehaviour
{
    public Color wideColor = Color.white;
    public float wideRange = 5f;
    public float wideAngle = 60f;
    public Color focusedColor = Color.white;
    public float focusedRange = 10f;
    public float focusedAngle = 30f;
    private bool focusedOn;
    private Light lamp;

    void Start()
    {
        lamp = GetComponent<Light>();
        Apply();
    }

    void Update()
    {
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            focusedOn = !focusedOn;
            Apply();
        }
    }

    void Apply()
    {
        lamp.color = focusedOn ? focusedColor : wideColor;
        lamp.range = focusedOn ? focusedRange : wideRange;
        lamp.spotAngle = focusedOn ? focusedAngle : wideAngle;
    }
}
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