Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity HorizontalLayoutGroup: UI Düzenlemede Uzmanlaşın

Paylaşan: Unity Eğitim 06 October 2025 7 dakika okuma 56 görüntülenme

Unity ile oyun veya uygulama geliştirirken, kullanıcı arayüzü (UI) elemanlarını düzenlemek çoğu zaman zorlayıcı olabilir. Özellikle dinamik olarak değişen veya farklı ekran boyutlarına uyum sağlaması gereken arayüzler için manuel hizalama ve boyutlandırma, zaman alıcı ve hataya açık bir süreçtir. İşte tam da bu noktada, Unity'nin sunduğu düzenleme bileşenleri (Layout Groups) devreye girer. Bu makalede, yatay hizalamanın temel taşı olan Unity HorizontalLayoutGroup bileşenini derinlemesine inceleyeceğiz.

Giriş: Neden Unity HorizontalLayoutGroup Kullanmalıyız?

HorizontalLayoutGroup, bir UI elemanının altındaki tüm çocuk elemanlarını (child elements) otomatik olarak yatay bir sıra halinde düzenleyen güçlü bir Unity bileşenidir. Bu sayede, butonlar, resimler veya metin alanları gibi birden fazla UI öğesini elle tek tek hizalamak yerine, sadece birkaç ayarla profesyonel görünümlü bir düzen oluşturabilirsiniz. Özellikle envanter sistemleri, menü çubukları veya skor tabloları gibi yatay dizilimin kritik olduğu durumlarda Unity HorizontalLayoutGroup, geliştiricilerin hayatını kolaylaştırır ve tutarlı bir UI deneyimi sunar.

HorizontalLayoutGroup Nedir ve Nasıl Kullanılır?

HorizontalLayoutGroup, bir RectTransform bileşenine sahip herhangi bir UI GameObject'ine eklenebilir. Bu GameObject, düzenlenecek çocuk elemanların ebeveyni (parent) olacaktır.

Ekleme Adımları:

  1. Düzenlemek istediğiniz UI elemanlarının ebeveyni olacak bir boş Canvas GameObject'i oluşturun (örneğin, sağ tıklayıp UI -> Panel veya Empty GameObject).
  2. Bu GameObject'i seçin ve Inspector penceresinde 'Add Component' butonuna tıklayın.
  3. Arama çubuğuna 'Horizontal Layout Group' yazın ve seçin.

Bileşeni ekledikten sonra, ebeveyn GameObject'in altına eklediğiniz her çocuk eleman otomatik olarak yatayda sıralanacaktır. Şimdi, HorizontalLayoutGroup'un temel özelliklerini inceleyelim:

Temel Özellikler:

  • Padding (Dış Boşluklar): Bu ayarlar, layout grubunun kenarları ile içerisindeki ilk ve son çocuk eleman arasında bırakılacak boşluğu belirler. Left, Right, Top ve Bottom değerlerini ayrı ayrı ayarlayabilirsiniz. Örneğin, tüm elemanların soldan 20 piksel boşlukla başlamasını istiyorsanız, Padding -> Left değerini 20 yapabilirsiniz.
  • Spacing (Elemanlar Arası Boşluk): Bu değer, her bir çocuk eleman arasına kaç piksel boşluk bırakılacağını belirler. Pozitif değerler boşluk yaratırken, negatif değerler elemanların üst üste binmesine neden olabilir (genellikle önerilmez).
  • Child Alignment (Çocuk Hizalaması): Çocuk elemanların ebeveynin dikey ekseninde nasıl hizalanacağını kontrol eder (örneğin, Upper Left, Middle Center, Lower Right). Bu, elemanların ebeveynin yüksekliği içindeki konumunu belirler.
  • Child Control Width/Height (Çocuk Boyut Kontrolü): Eğer bu kutucuklar işaretlenirse, HorizontalLayoutGroup, çocuk elemanların RectTransform bileşenindeki Width ve Height değerlerini otomatik olarak yönetir. Genellikle bu kutucuklar işaretli olmalıdır ki layout grubu doğru çalışabilsin.
  • Child Force Expand Width/Height (Çocuk Genişletme Zorlaması): Bu kutucuklar işaretlendiğinde, layout grubu, çocuk elemanların mevcut alanı doldurmak için genişlemesini veya büzülmesini zorlar. Örneğin, Child Force Expand Width işaretliyse ve yeterli alan varsa, çocuk elemanlar bu alanı dolduracak şekilde yatayda genişler. Bu, tüm elemanların eşit genişlikte olmasını istediğiniz durumlarda çok kullanışlıdır.
  • Reverse Arrangement (Ters Düzenleme): Eğer bu kutucuk işaretlenirse, çocuk elemanlar normal sıralamanın (soldan sağa) aksine sağdan sola doğru düzenlenir. Bu, bazı dillerin veya özel UI tasarımlarının gerektirdiği durumlarda faydalıdır.

Unity HorizontalLayoutGroup ile İleri Seviye Kullanım İpuçları

1. Layout Element ile Çocuklara Özel Boyutlandırma

HorizontalLayoutGroup, çocuk elemanların boyutlarını genellikle kendi içinde yönetir. Ancak belirli bir çocuğun farklı davranmasını isteyebilirsiniz. Bunun için çocuğa bir Layout Element bileşeni ekleyebilirsiniz. Layout Element sayesinde çocuğa minimum/maksimum genişlik/yükseklik (Min Width, Preferred Width, Flexible Width vb.) değerleri atayarak, layout grubunun genel kurallarını geçersiz kılabilirsiniz. Örneğin, bir butonun diğerlerinden her zaman daha geniş olmasını istiyorsanız, o butona Layout Element ekleyip Preferred Width değerini artırabilirsiniz.

2. İç İçe Layout Grupları Kullanımı (Nesting)

Karmaşık UI düzenleri oluşturmak için HorizontalLayoutGroup'ları diğer layout grupları (örneğin VerticalLayoutGroup) ile iç içe kullanabilirsiniz. Örneğin, bir menüde her satırın yatayda üç buton içermesini istiyorsanız, her satırı bir HorizontalLayoutGroup içinde tutabilir ve bu HorizontalLayoutGroup'ları da ana bir VerticalLayoutGroup içine yerleştirebilirsiniz. Bu yöntem, modüler ve yönetilebilir UI tasarımları oluşturmanızı sağlar.

3. Content Size Fitter ile Dinamik Boyutlandırma

Ebeveyn GameObject'in boyutunu, çocuk elemanların toplam boyutuna göre otomatik olarak ayarlamak istiyorsanız, HorizontalLayoutGroup ile birlikte Content Size Fitter bileşenini kullanabilirsiniz. Ebeveyne Content Size Fitter ekleyin ve Horizontal Fit ayarını Preferred Size olarak belirleyin. Bu, ebeveynin genişliğini, içerisindeki çocuk elemanların toplam genişliğine (Padding ve Spacing dahil) göre otomatik olarak ayarlamasını sağlayacaktır. Bu ikili, dinamik içerikli paneller veya listeler için vazgeçilmezdir.

Yaygın Hatalar ve Çözümleri

Çocuk Elemanlar Beklendiği Gibi Boyutlanmıyor

Bu, Unity HorizontalLayoutGroup kullanırken karşılaşılan en yaygın sorunlardan biridir. Genellikle Child Control Width/Height veya Child Force Expand Width/Height ayarlarının yanlış yapılandırılmasından kaynaklanır. Eğer çocukların boyutlarını layout grubunun yönetmesini istiyorsanız, Child Control Width ve Child Control Height kutucuklarının işaretli olduğundan emin olun. Eğer çocukların mevcut alanı doldurmasını istiyorsanız, Child Force Expand Width seçeneğini işaretlemeyi unutmayın. Ayrıca, çocuk elemanlarda bulunan Layout Element bileşenlerindeki Min/Preferred/Flexible Width ayarlarını da kontrol etmelisiniz; bu değerler layout grubunun ayarlarını geçersiz kılabilir.

Elemanlar Birbirinin Üzerine Biniyor

Bu durum genellikle Spacing değerinin çok düşük veya negatif ayarlanmasından ya da Padding değerlerinin yanlış yapılandırılmasından kaynaklanır. Spacing değerini artırarak çocuk elemanlar arasına daha fazla boşluk ekleyebilirsiniz. Ayrıca, ebeveynin RectTransform'unun Width değeri, tüm çocukları ve boşlukları sığdırmak için yeterince geniş değilse bu sorun yaşanabilir. Content Size Fitter kullanarak ebeveynin genişliğini otomatik olarak ayarlamak bu sorunu çözebilir.

Performans Sorunları

Çok fazla iç içe geçmiş layout grubu veya çok sayıda dinamik olarak eklenip çıkarılan UI elemanı, Unity'nin UI sisteminde performans düşüşlerine neden olabilir. Her layout değişikliği, tüm layout hiyerarşisinin yeniden hesaplanmasına yol açabilir. Bu, özellikle mobil cihazlarda veya düşük performanslı sistemlerde fark edilebilir bir gecikmeye neden olabilir.

Performans ve Optimizasyon Notları

  • Gereksiz Layout Gruplarından Kaçının: Sadece birkaç sabit elemanı hizalamak için her zaman bir layout grubuna ihtiyacınız olmayabilir. Basit durumlarda RectTransform'un anchor ve pivot ayarları yeterli olabilir.
  • Layout Element Kullanımını Optimize Edin: Eğer bir çocuğun boyutu sabitse, Layout Element üzerindeki Min/Preferred Width/Height değerlerini ayarlamak yerine, doğrudan RectTransform'un boyutlarını kullanmayı düşünebilirsiniz. Layout Element'ler, layout grubunun hesaplamalarını biraz daha karmaşık hale getirebilir.
  • Dinamik İçerik için Object Pooling: Eğer bir Unity HorizontalLayoutGroup içinde sık sık eleman ekleyip çıkarıyorsanız, GameObject'leri yok edip yeniden oluşturmak yerine bir Object Pooling sistemi kullanmak performansı artıracaktır. Bu sayede çöp toplama (garbage collection) maliyetleri azalır.
  • Content Size Fitter Dikkatli Kullanımı: Content Size Fitter, her değişiklikte kendini ve bağlı olduğu layout grubunu yeniden hesaplar. Eğer çok sayıda Content Size Fitter kullanıyorsanız, bu performans sorunlarına yol açabilir. Sadece gerçekten dinamik boyuta ihtiyacınız olan yerlerde kullanmaya özen gösterin.

Sonuç

Unity HorizontalLayoutGroup, Unity UI geliştirirken yatayda düzenli ve esnek arayüzler oluşturmak için vazgeçilmez bir araçtır. Temel özelliklerini, ileri seviye kullanım ipuçlarını ve yaygın hataların çözümlerini anlayarak, çok daha verimli ve hatasız UI tasarımları yapabilirsiniz. Unutmayın, iyi tasarlanmış bir UI, kullanıcı deneyiminin temelidir ve HorizontalLayoutGroup bu temeli sağlamlaştırmanıza yardımcı olur.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!