Unity, oyun geliştiricilere ve 3D sanatçılara inanılmaz bir esneklik sunar. Bu esnekliğin en güçlü yönlerinden biri de, geliştirme ortamını kendi ihtiyaçlarınıza göre şekillendirebilme yeteneğidir. Özellikle büyük projelerde veya tekrarlayan görevlerle uğraşırken, standart Unity araçları bazen yetersiz kalabilir. İşte tam bu noktada, Unity EditorWindow sınıfı devreye girer. Bu sınıf, Unity Editor içerisinde kendi özel pencerelerinizi, yani kendi özel araçlarınızı oluşturmanız için temel bir yapı taşı sunar.
Bu kapsamlı rehberde, EditorWindow kullanarak Unity iş akışınızı nasıl hızlandıracağınızı, tekrarlayan görevleri nasıl otomatikleştireceğinizi ve projelerinize özgü çözümler nasıl üreteceğinizi adım adım öğreneceksiniz. Neden kendi araçlarınızı geliştirmeniz gerektiğinden, temel kod yapısına, gelişmiş özelliklere ve en iyi uygulamalara kadar her şeyi ele alacağız. Hazırsanız, Unity Editor’ın gizli güçlerini keşfetmeye başlayalım!
Neden Kendi Unity Araçlarınızı Geliştirmelisiniz?
Kendi özel Unity araçlarınızı geliştirmek, ilk başta ekstra bir iş gibi görünse de, uzun vadede size ve ekibinize önemli avantajlar sağlar. İşte başlıca nedenler:
- İş Akışı Optimizasyonu: Tekrarlayan ve zaman alıcı görevleri otomatikleştirerek geliştirme sürecini hızlandırın. Örneğin, yüzlerce varlığa belirli bir ayar uygulamak yerine, tek bir butonla bu işlemi gerçekleştiren bir araç yazabilirsiniz.
- Proje Spesifik İhtiyaçlar: Her projenin kendine özgü gereksinimleri vardır. Unity’nin yerleşik araçları her zaman bu spesifik ihtiyaçları karşılamayabilir. Kendi aracınızla, projenizin benzersiz sorunlarına doğrudan çözümler üretebilirsiniz.
- Hata Azaltma: Manuel olarak yapılan işlemler, insan hatasına açıktır. Otomatik araçlar, bu tür hataları ortadan kaldırarak daha tutarlı ve güvenilir sonuçlar elde etmenizi sağlar.
- Verimlilik Artışı: Geliştiricilerin daha az sıkıcı görevle uğraşmasını sağlayarak, yaratıcı ve daha kompleks problemlere odaklanmalarına olanak tanır.
- Ekip İçi Tutarlılık: Bir ekiple çalışırken, herkesin aynı standartları ve yöntemleri kullanmasını sağlamak önemlidir. Özel araçlar, bu tutarlılığı sağlayarak ortak bir iş akışı oluşturur.
EditorWindow Nedir ve Nasıl Çalışır?
EditorWindow, Unity Editor içerisinde bağımsız bir pencere oluşturmanızı sağlayan bir sınıftır. Bu sınıf, ScriptableObject‘ten türetilmiştir, bu da onun serileştirilebilir özelliklere sahip olduğu anlamına gelir. Yani, editör kapanıp açılsa bile pencerenizin durumu ve içindeki veriler korunabilir.
MonoBehaviour‘dan farklı olarak, EditorWindow sınıfları sadece Unity Editor’da çalışır ve oyun derlenip oynatıldığında var olmazlar. Bu, onları sadece geliştirme zamanı için tasarlanmış araçlar yapmak için ideal kılar. Bir EditorWindow’un temel çalışma prensibi, pencerenin içeriğini çizmek ve kullanıcı etkileşimlerini yönetmek için OnGUI() metodu üzerine kuruludur. Bu metod, pencereye her karede yeniden çizim talimatları verir ve bu sayede dinamik bir arayüz oluşturulur.
Temel Bir EditorWindow Oluşturma Adımları
Şimdi basit bir EditorWindow oluşturarak işe koyulalım. Temel adımlar şunlardır:
- Yeni Bir C# Betiği Oluşturun: Proje pencerenizde sağ tıklayıp
Create > C# Scriptyolunu izleyerek yeni bir betik oluşturun. Adını örneğinMyFirstEditorWindowkoyabilirsiniz. - Gerekli Namespace’leri Ekleyin: Editörle ilgili sınıfları kullanabilmek için betiğinizin başına
using UnityEditor;veusing UnityEngine;eklemelisiniz. - EditorWindow Sınıfından Türetin: Oluşturduğunuz sınıfı
EditorWindowsınıfından türetin. Yani,public class MyFirstEditorWindow : EditorWindowşeklinde olmalıdır. - Menü Öğesi Ekleyin: Pencerenizi Unity Editor menüsünden açabilmek için bir
[MenuItem]özniteliği kullanmalısınız. Bu öznitelik, statik bir metoda atanır ve bu metod pencereyi açma işlemini gerçekleştirir. - Pencereyi Gösterin: Menü öğesinde çağrılacak statik metot içerisinde
GetWindow<MyFirstEditorWindow>("Pencere Adı")metodunu kullanarak pencerenizi açın. - OnGUI Metodunu Uygulayın: Bu metot içerisinde, pencerenizin içeriğini oluşturacak GUI (Grafiksel Kullanıcı Arayüzü) elemanlarını tanımlayın.
Basit Bir EditorWindow Kodu (Örnek Yapısı)
Aşağıdaki yapı, temel bir EditorWindow’un nasıl göründüğünü anlatmaktadır:
using UnityEditor;
using UnityEngine;
public class MyFirstEditorWindow : EditorWindow
{
string myString = "Merhaba Unity!";
float myFloat = 1.0f;
bool toggleValue = true;
// Unity menüsünde 'Window/My Custom Tools/İlk Pencere' altında gözükecek.
[MenuItem("Window/My Custom Tools/İlk Pencere")]
public static void ShowWindow()
{
// Pencereyi oluşturur veya açar ve başlığını belirler.
GetWindow<MyFirstEditorWindow>("İlk Pencere");
}
void OnGUI()
{
// Pencere başlığı
GUILayout.Label("Editör Penceresi Örneği", EditorStyles.boldLabel);
// Metin giriş alanı
myString = EditorGUILayout.TextField("Mesaj", myString);
// Kaydırıcı
myFloat = EditorGUILayout.Slider("Değer", myFloat, 0f, 10f);
// Açma/Kapama düğmesi
toggleValue = EditorGUILayout.Toggle("Aktif Mi?", toggleValue);
// Buton
if (GUILayout.Button("Mesajı Göster"))
{
Debug.Log("Gönderilen Mesaj: " + myString + ", Değer: " + myFloat + ", Aktif: " + toggleValue);
}
}
}
Bu kod parçası, bir metin alanı, bir kaydırıcı, bir açma/kapama düğmesi ve bir buton içeren basit bir pencere oluşturur. Butona tıklandığında, girilen değerler Unity konsoluna yazdırılır.
GUI ve EditorGUILayout Kullanımı
OnGUI() metodu içerisinde arayüz elemanlarını çizmek için genellikle GUILayout ve EditorGUILayout sınıflarını kullanırız. Temel fark şudur:
GUILayout: Daha genel GUI elemanları sunar ve otomatik düzenlemeye (layout) izin verir.EditorGUILayout: Sadece Editör ortamında kullanılabilen,GUILayout‘a göre daha gelişmiş ve Unity’nin kendi stilini yansıtan kontroller sunar. Özellikle otomatik etiketleme ve hizalama gibi kolaylıklar sağlar.
Yukarıdaki örnekte gördüğünüz gibi, EditorGUILayout.TextField, EditorGUILayout.Slider gibi metodlar, etiketleri otomatik olarak hizalar ve standart Unity Editör görünümünü korur. Ayrıca, EditorGUILayout.BeginVertical(), EditorGUILayout.BeginHorizontal() gibi metodlarla arayüz elemanlarını dikey veya yatay olarak gruplayarak daha karmaşık düzenler oluşturabilirsiniz.
Veri Yönetimi ve Serileştirme
EditorWindow’unuzdaki değişkenler (yukarıdaki myString, myFloat gibi), Unity tarafından otomatik olarak serileştirilir. Bu, editör pencerenizi kapatıp yeniden açtığınızda değerlerinin korunacağı anlamına gelir. Ancak, daha kalıcı veya proje varlıklarıyla ilişkili verileri yönetmek istiyorsanız farklı yaklaşımlar da mevcuttur:
ScriptableObject: Büyük ve karmaşık veri yapılarını kalıcı olarak saklamak ve proje varlığı olarak yönetmek için idealdir. EditorWindow’unuz bu ScriptableObject’i referans alabilir ve onun verilerini değiştirebilir.EditorPrefs: Basit anahtar-değer çiftlerini editör genelinde saklamak için kullanılır. Genellikle kullanıcı ayarları veya küçük tercihler için tercih edilir.AssetDatabase: Proje içerisindeki varlıkları (asset) oluşturma, silme, taşıma veya değiştirme işlemleri için kullanılır. Örneğin, özel bir varlık tipi oluşturmak veya mevcut varlıkları toplu olarak işlemek için bu sınıfı kullanabilirsiniz.
En İyi Uygulamalar ve İpuçları
Etkili ve kullanıcı dostu Unity Editor araçları geliştirmek için bazı önemli ipuçları:
- Kullanıcı Deneyimi (UX) Odaklı Tasarım: Aracınızın arayüzü anlaşılır, sezgisel ve kullanımı kolay olmalıdır. Karmaşık işlemleri basitleştirin ve gereksiz detaylardan kaçının.
- Performansı Göz Önünde Bulundurun:
OnGUI()metodu her karede çağrıldığı için, bu metod içerisinde pahalı işlemlerden (örneğin, büyük veri setlerini işlemek, sürekli dosya okuma/yazma) kaçının. Bu tür işlemleri sadece gerektiğinde (örneğin bir butona basıldığında) yapın. - Hata Yönetimi ve Geri Bildirim: Kullanıcı yanlış bir giriş yaptığında veya bir işlem başarısız olduğunda, net hata mesajları veya görsel geri bildirimler sağlayın.
- Kod Organizasyonu: Büyük ve karmaşık araçlar geliştirirken, kodunuzu mantıksal parçalara ayırın. Yardımcı sınıflar veya metotlar kullanarak okunabilirliği ve bakımı kolaylaştırın.
- Versiyon Kontrolü: Editör betikleriniz de projenizin bir parçasıdır. Diğer kod varlıklarınız gibi, versiyon kontrol sistemine (Git, SVN vb.) dahil ettiğinizden emin olun.
- Test Edin: Aracınızı farklı senaryolarda ve farklı Unity sürümlerinde test edin. Beklenmedik durumları tespit etmek ve düzeltmek için zaman ayırın.
Gelişmiş Kullanım Senaryoları
EditorWindow sınıfının sunduğu esneklikle neler yapabileceğinizin sınırı hayal gücünüzdür. İşte bazı gelişmiş kullanım senaryoları:
- Toplu Varlık İşleme Araçları: Projenizdeki binlerce dokuyu yeniden boyutlandırmak, materyallerin ayarlarını değiştirmek veya ses kliplerini standardize etmek gibi işlemleri tek tıkla yapın.
- Sahne Temizleme ve Optimizasyon Araçları: Sahnedeki kullanılmayan GameObject’leri, boş bileşenleri veya performans düşürücü ayarları tespit edip otomatik olarak temizleyen araçlar oluşturun.
- Oyun İçi Veri Editörleri: Diyalog sistemleri, görev ağaçları, envanter sistemleri veya beceri ağaçları gibi oyun içi verileri doğrudan Unity Editor içinde görsel olarak düzenleyebileceğiniz özel editörler tasarlayın.
- Proje Yönetim Panelleri: Geliştiricilerin belirli klasörlere hızlıca erişmesini sağlayan, sık kullanılan prefab’leri listeleyen veya belirli bir göreve atanmış varlıkları gösteren paneller oluşturun.
- Custom Inspector’lar ile Entegrasyon: EditorWindow’unuzu,
CustomEditorile birlikte kullanarak belirli GameObject’lerin veya ScriptableObject’lerin Inspector penceresini daha da güçlendirebilirsiniz.
Sonuç
Unity EditorWindow sınıfı, Unity geliştiricilerine kendi editör deneyimlerini kişiselleştirme ve iş akışlarını benzersiz bir şekilde optimize etme gücü verir. Bu rehberde öğrendiğiniz temel prensipler ve en iyi uygulamalarla, projelerinizi bir üst seviyeye taşıyacak güçlü ve verimli araçlar geliştirebilirsiniz.
Unutmayın, iyi tasarlanmış bir editör aracı, geliştirme sürenizi kısaltırken, yaratıcılığınıza daha fazla alan açar. Kendi özel araçlarınızı geliştirmekten çekinmeyin; bu, sadece projenize değil, aynı zamanda kendi geliştirici yeteneklerinize de yatırım yapmak anlamına gelir. Başarılar dileriz!



