Magic string’ler Unity’de küçük projelerde zararsız görünür, ama proje hızlandıkça sessiz hatalara dönüşebilir.
Bir tag adı trigger script’ine kopyalanır. Bir sahne adı yükleme metoduna yazılır. Bir animator parametresi elle girilir. Bir shader property adı render kodunda tekrar edilir. Kod derlenir, ama editörde yapılan bir yeniden adlandırma davranışı runtime’da bozabilir.
Amaç her string’i yok etmek değil. Önemli referansları görünür, isimlendirilmiş ve kontrol edilebilir hale getirmektir.
Magic String Nedir?
Unity’de magic string genellikle başka bir yerde yönetilen proje verisine işaret eden düz string literal’idir.
Sık görülen örnekler:
- tag’ler
- layer ve sorting layer adları
- sahne adları
Resourcesyolları- animator parametre isimleri
- shader property isimleri
- input action adları
- Addressables key’leri
- projeye özel ID ve etiketler
Şu kodu yazmak kolaydır, ama koruması zordur:
if (other.CompareTag("Player"))
{
SceneManager.LoadScene("GameOver");
}
Editörde Player ya da GameOver değişirse derleyici sizi uyaramaz.
Mümkünse Serialized Reference Kullanın
En iyi çözüm çoğu zaman sabit kullanmak bile değildir.
Bir script’in prefab, material, audio clip veya ScriptableObject referansına ihtiyacı varsa, referansı doğrudan serialize edin:
[SerializeField] private AudioClip hitSound;
[SerializeField] private GameObject projectilePrefab;
Serialized reference’lar inspector’da görünür, yeniden adlandırmalardan etkilenmez ve bağımlılıkları tasarımcılar veya reviewer’lar için daha açık hale getirir.
String’leri yalnızca Unity API’si veya iş akışı gerçekten string benzeri bir anahtar istediğinde kullanın.
Mecburi String’leri Tek Yerde Toplayın
String kullanmanız gerekiyorsa, onu isimlendirilmiş tek bir yerde tutun:
public static class GameTags
{
public const string Player = "Player";
public const string Enemy = "Enemy";
}
Sonra kullanım şöyle olur:
if (other.CompareTag(GameTags.Player))
{
// ...
}
Bu değerleri otomatik olarak doğru yapmaz, ama projeye güncellenecek tek bir yer ve aranacak net bir isim verir.
Unity Proje Verisinden Sabit Üretin
Tag, layer, sahne, resource yolu, animator parametresi ve shader property gibi editör tarafından yönetilen veriler için üretilen sabitler genellikle elle tutulan sabitlerden daha güvenlidir.
Bir üretici projeyi tarayıp düz C# çıktısı yazabilir:
SceneIds.GameOver
TagIds.Player
AnimatorParams.IsMoving
ShaderProperties.BaseColorId
Böylece autocomplete, derleme zamanı referansları ve code review sırasında daha temiz arama sonuçları elde edersiniz.
ConstSafe tam olarak bu iş akışı için hazırlanmıştır. Unity proje verisinden tür güvenli C# referansları üretir; üretilen dosyaları okunabilir, kaynak kontrolüne uygun ve runtime bağımlılığı olmadan bırakır.
Üretilen Dosyalar İncelenebilir Olmalı
Üretilen kod gizemli olmamalıdır.
Unity projelerinde iyi üretilmiş sabit dosyaları:
- düz C# dosyalarıdır
- her çalıştırmada deterministik kalır
- source control’e eklenebilir
- review sırasında okunabilir
- runtime’da üretici araca bağlı değildir
Bu önemli, çünkü sabitler çoğu zaman gameplay kodunun derinlerinde kullanılır. Üretilen dosya değiştiğinde ekip neyin neden değiştiğini anlayabilmelidir.
Koddan Gelen İsimler İçin nameof Kullanın
Her string Unity proje verisinden gelmez.
String bir C# sınıfı, property veya metot adına referans veriyorsa nameof kullanın:
Debug.Log(nameof(PlayerController));
Bu, kod tarafından sahip olunan isimleri derleyiciye bağlı tutar. Sınıf veya üye yeniden adlandırılırsa string de onunla birlikte güncellenir.
Üretilemeyen Veriler İçin Validation Ekleyin
Bazı referanslar doğası gereği dinamiktir: save key’leri, remote config değerleri, localization key’leri, analytics event’leri veya sunucu kaynaklı ID’ler.
Bunlar için değeri oluşturan ya da tüketen akışın yakınına validation ekleyin. Bu bir editör kontrolü, play mode testi veya küçük bir build-time check olabilir.
Önemli olan her string’i ortadan kaldırmak değil; önemli string’leri oyuncular hatayı bulmadan önce kontrol edilebilir hale getirmektir.
Basit Kural
Şu sırayı kullanın:
- Asset ve object referansları için serialized reference tercih edin.
- Koddan gelen isimler için
nameofkullanın. - Unity editör verisi için sabit üretin.
- Kaçınılmaz manuel string’leri tek yerde toplayın.
- Önceden bilinemeyen dinamik key’leri validation ile kontrol edin.
Bu yaklaşım pratik kalır. Magic string’lerin kırılgan taraflarını azaltır, ama her yere gereksiz tören eklemez.
Tag, sahne, resource yolu, animator parametresi, shader property ve benzer Unity proje verileri için ConstSafe doğrudan bu probleme odaklanan araçtır.