SerializeField

class in UnityEngine / Implemented in:UnityEngine.CoreModule

Açıklama

Unity'e private bir alanı serialize etmeye zorlar.

Unity kodlarınızı serialize ettiğinde, yalnızca public alanları serialize eder. Özel alanlarınızı da serialize etmek isterseniz, bu alanlara SerializeField niteliğini ekleyebilirsiniz.

Unity, tüm kod bileşenlerinizi serialize eder, yeni derlemeleri yeniden yükler ve serialize edilmiş sürümlerinden kod bileşenlerinizi yeniden oluşturur. Bu serialize etme işlemi, .NET'in serialize etme işlevselliğiyle değil, dahili bir Unity serialize etme sistemiyle gerçekleştirilir.

Serialize etme sistemi aşağıdaki işlemleri yapabilir:

  • (Serialize edilebilir tiplerin) public static olmayan alanları serialize EDEBİLİR.
  • SerializeField niteliğiyle işaretlenmiş olan statik olmayan, public olmayan alanları serialize EDEBİLİR.
  • Statik alanları serialize EDEMEZ.
  • Özellikleri serialize EDEMEZ.

Serialize edilebilir türler

Unity aşağıdaki türlerin alanlarını serialize edebilir:

  • GameObject, Component, MonoBehaviour, Texture2D, AnimationClip gibi UnityEngine.Object'den türeyen tüm sınıflar.
  • int, string, float, bool gibi temel veri tipleri.
  • Vector2, Vector3, Vector4, Quaternion, Matrix4x4, Color, Rect, LayerMask gibi bazı yerleşik türler.
  • Serialize edebilir bir türden diziler
  • Serialize edebilir bir türden listeler
  • Enum'lar
  • Struct'lar

Daha fazla seralize etme bilgisi için Kod Serialize Etme'ye bakabilirsiniz.

Not: Bir listeye (veya diziye) aynı öğeyi iki kez eklerseniz, liste serialize edildiğinde, yeni listede bir öğenin iki kopyasını alırsınız.

Not: Özel bir Struct alanını serialize etmek istiyorsanız, Struct'a [System.Serializable] niteliğini vermeniz gerekir.

İpucu: Unity, Dictionary'yi serialize etmez, ancak anahtarlar için bir List<> ve değerler için bir List<> saklayabilirsiniz. Bir örnek için ISerializationCallbackReceiver'a bakın.

Ayrıca bakınız: NonSerializedSerializeReferenceSerializable

using UnityEngine;

public class SomePerson : MonoBehaviour
{
    //Bu alan, public olduğu için serialize edilir.
    public string firstName = "John";

    //Bu alan, private olduğu için serialize edilmez.
    private int age = 40;

    //Bu alan, SerializeField niteliği uygulandığı için 
    //private olmasına rağmen serialize edilir.
    [SerializeField]
    private bool hasHealthPotion = true;

    void Start()
    {
        if (hasHealthPotion)
            Debug.Log("Person's first name: " + firstName + " Person's age: " + age);
    }
}


Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.

Yorumlar

Bu blogdaki popüler yayınlar

Important Classes - Vectors

RequireComponent

Important Classes - GameObject