Unity Inspectorda Değişkeni Sadece Okunabilir (Read Only) Yapma

Unity Inspector Özeleştirmesi

Unity Inspectorda Değişkeni Sadece Okunabilir (Read Only) Yapma

 Merhaba arkadaşlar bu gün sizlere Unity üzerinden tanımladığımız Public ve SerializeField olan değişkenlerin Inspector penceresinden nasıl değiştirilemez bir hale getirebileceğinizi anlatacağım, yapacağımız işlemi biraz daha iyi anlayabilmeniz için hemen aşağıdaki resim işinize yarayacaktır.

Unity Read Only Değişken

Yukarıdaki ekran görüntüsünde gördüğünüz gibi son iki değişken Unity üzerinden düzenlenemiyor hadi gelin nasıl yaptığımıza geçelim.

Bu yapacağımız işlem için bize iki adet Script gerekiyor bunların isimlerini kafanıza göre koyabilirsiniz ama ben şu isimleri kullanıyorum genel olarak bu işlem için.

  • 1. Scriptim SadeceOkunabilirEditor
  • 2. Scriptimin adı SadeceOkunabilirDeger
Bunlardan ilkini "Editor" isimli bir klasörün içine koymamız gerekiyor yoksa Unity de oyunumuzu çıktı (build) alırken hata ile karşılaşırsınız. Editor düzenlemelerinin olduğu scriptleri her zaman "Editor" adında bir klasöre koymanız gerekiyor.

Şimdi kodlarımıza geçelim


SadeceOkunabilirEditor Scriptimizin Kodları

// Kütüphanelerimizi dahil ediyoruz
using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(SadeceOkunabilirDeger))] // Özel değer çizdiğini ve bu özel değerin türünün SadeceOkunabilirDeger olduğunu belirtiyoruz.
public class SadeceOkunabilirEditor : PropertyDrawer // Sınıfımızı PropertyDrawer sınıfından türetiyoruz
{
    public override void OnGUI(Rect konum, SerializedProperty ozellik, GUIContent cizgi) // GUI ye aşırı yükleme yapıyor ve değerleri alıyoruz
    {
        GUI.enabled = false; // GUI yi kapatıyoruz
        EditorGUI.PropertyField(konum, ozellik, cizgi, true); // İstediğimiz özellikleri veriyoruz
        GUI.enabled = true; // GUI yi aktif hale getiriyoruz
    }
}

SadeceOkunabilirDeger Scriptimizin Kodları

Burada sınıfımıza verdiğimiz isim aslında aşağıda bulunan kullanım kısmında bu özelliği nasıl çağırdığımızı değiştiriyor..
// Kütüphanemizi çekiyoruz
using UnityEngine;
public class SadeceOkunabilirDeger : PropertyAttribute { } // Boş bir sınıf oluşturduk ve bu sınıfın Editör Attribute si yani editör düzenleyecisi olduğunu söyledik, o sınıftan türettik.

Kullanımı

Evet arkadaşlar bu kodlarımızı doğru bir şekilde yaptıktan sonra kullanmk için yapmamız gereken tek şey kullanacağımız değişkenin başına "[SadeceOkunabilirDeger]" yazmak olacaktır.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Deneme : MonoBehaviour
{
    // Düzenlenebilir Değişkenler
    public float deneme;
    [SerializeField] private float deneme1;

    // Inspector penceresinden düzenlenemeyen değişkenler
    [SadeceOkunabilirDeger]public float deneme2;
    [SerializeField] [SadeceOkunabilirDeger] private float deneme3;
}

Benim yazdığım sürümünü indirmek ve diğer yazdığım eklenti / paketleri indirmek isterseniz aşağıdaki bağlantıları kullanabilirsiniz.

Unity Paketlerim (Github)

Unity Sadece Okunabilir Değişken (Github)