Unity ile iOS ve Android için farklı çözünürlüklerde UI ölçeklendirme konusunda derinlemesine bir rehber sunuluyor. Bu makale, temel kavramlardan ziyade gerçek dünya senaryolarında karşılaşılan sorunlara odaklanır ve kesintisiz, tutarlı bir kullanıcı arayüzü elde etmek için uygulanabilir çözümler önerir.
Nesne yapısı ve Canvas Scaler yapılandırması
UI ölçeklendirme konusunun çekirdeği Canvas Scaler’dır. Özellikle Scale With Screen Size modu, Reference Resolution ve Screen Match Mode arasındaki etkileşim kritik öneme sahiptir. Öncelikli yaklaşım olarak, hedef platformlarda en fazla yaygınlığı olan en-boy oranını belirleyin ve bu değere göre referenceResolution’ı ayarlayın. Örneğin 1125×2436 veya 1080×2340 gibi değerlerle genişlik/düşey oranlarındaki farkları minimize edin. Screen Match Mode olarak Width Or Height seçimini netleştirin ve gerekirse oyunun farklı aşamalarında dinamik olarak değiştirecek bir mekanizma geliştirin.
İleri düzey öneriler:
– Canvas Scaler’ı Constant Pixel Size yerine Scale With Screen Size olarak kullanın. Reference Resolution ile hedeflenen genişlik-yükseklik çiftine odaklanın.
– Screen Match Mode’u Expand/Shrink arasında cihaz oranına göre dinamik seçin. Başlangıçta 0.5 değeri ile Match’i tutun, ancak cihazlar arası fark kritik ise script ile otomatik uyarlayın.
– Öğe ölçeklendirmesi sadece Canvas ile sınırlı kalmamalı; Font Boyutu ve TextMeshPro ayarları da uyumlu biçimde ölçeklenmelidir. TextMeshPro için global ölçeklendirme stratejisi geliştirmek performans ve okunabilirlik açısından faydalıdır.
Çözünürlük Bağımlı Ölçekleme Stratejileri
– Yatay mı yoksa dikey mi odaklı tasarım? İçerik yatay kaydırmalıysa Reference Resolution’un genişliği, dikey tasarımda ise yükseklik tarafı daha baskın tutulmalıdır.
– Safe Area kavramı kritik. iPhone X ve sonrası cihazlarda üst ve alt güvenli alanlar UI konumlarını etkiler. Safe Area hesaplarını her frame veya belirli aralıklarla güncelleyen bir mekanizma eklemek gerekir.
– DPI/PPI farkı; Canvas Scaler, fiziksel boyutlarla uyumu hedefler. UI öğelerinin piksel yoğunluğunu korumak için ölçeklendirme mantığını “points” tabanında sürdürün ve minimum ölçeklendirme sınırlarını belirleyin.
Platforma özgü ayarlamalar ve Safe Area
– iOS ve Android arasındaki farklılıklar, notch, durum çubuğu ve çoklu ekran oranları nedeniyle ölçeklendirme davranışlarını etkiler. iOS tarafında güvenli alanı gözetmek için Frame ve Anchor ayarlarını sıkı tutun. Android’de ise farklı cihazlar için esneklik sağlayan responsive UI tasarımını benimseyin.
– Android’de DPI bağımlılığını azaltmak adına font ve ikon ölçeklendirmesini tasarım sistemine entegre edin. Alt elementlerin bağımsız ölçeklendirilmesini engelleyin, parent ile uyumlu eksenler üzerinden çalıştırın.
– Çok ekranlı cihazlarda (tablet/telefon) kritik UI öğelerinin minimum ve maksimum boyut sınırlarını mantıklı değerlerle sınırlandırın.
Kod ve yapılandırma örnekleri
Aşağıda, dinamik olarak Screen Match Mode ve Reference Resolution ayarlarını yöneten temel bir örnek veriliyor. Bu yaklaşım, cihazın en-boy oranını baz alıp otomatik olarak ayar yapar.
// C# Script: UIScaleManager.cs
“`csharp
using UnityEngine;
[ExecuteAlways]
public class UIScaleManager : MonoBehaviour
{
public CanvasScaler scaler;
[Range(0f, 1f)] public float defaultMatch = 0.5f;
void Awake()
{
if (scaler == null) scaler = GetComponentInChildren
UpdateScale();
}
void Update()
{
// Genişleyen/kapanan ekranları yakalamak için
if (Screen.width != lastW || Screen.height != lastH)
{
UpdateScale();
lastW = Screen.width;
lastH = Screen.height;
}
}
private int lastW = 0, lastH = 0;
void UpdateScale()
{
if (scaler == null) return;
// En-boy oranına göre referans çözünürlüğü ayarlayın
float aspect = (float)Screen.width / Screen.height;
scaler.referenceResolution = aspect > 1.0f ? new Vector2(1200, 900) : new Vector2(800, 1200);
// Screen Match Mode ve Match değeri
scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
scaler.matchWidthOrHeight = aspect > 1f ? 0f : 1f; // Yatay/dikey odaklı
// Opsiyonel: Dinamik ayar
scaler.matchWidthOrHeight = Mathf.Lerp(0.4f, 0.6f, defaultMatch);
}
}
“`
JSON yapı ile Breakpoint tabanlı ölçeklendirme yaklaşımı
Düşük, orta ve yüksek çözünürlükler için referans çözünürlük ve match değerlerini tanımlayarak dinamik ölçeklendirme sağlanabilir.
{
“breakpoints”: [
{“name”: “mobile-compact”, “minWidth”: 0, “maxWidth”: 720, “referenceResolution”: {“width”: 800, “height”: 1280}, “match”: 1},
{“name”: “mobile-wide”, “minWidth”: 721, “maxWidth”: 1280, “referenceResolution”: {“width”: 1280, “height”: 720}, “match”: 0.5},
{“name”: “tablet”, “minWidth”: 1281, “maxWidth”: 4096, “referenceResolution”: {“width”: 1200, “height”: 1600}, “match”: 0.5}
]
}
Bu yapı, breakpoints üzerinden Unity’nin UI ölçeklendirme davranışını otomatik olarak yönlendirmek için kullanılabilir. Bir arayüz veya script ile bu JSON’u okuyup scaler ayarlarını anlık olarak değiştirmek, çok platformlu projelerde güvenilir bir çözüm sunar.
n8n ekspresi örneği
{
“set”: [
{
“name”: “ui_scale”,
“value”: “{{ Math.max(0.4, Math.min(0.6, $json[\”default_match\”])) }}”,
“type”: “number”
}
]
}
Bu ekspresyon CI/CD süreçlerinde veya dağıtım anında farklı platformlar için ölçeklendirme parametrelerini otomatikleştirmek amacıyla kullanılabilir. Özellikle çok platformlu projelerde, dağıtım akışlarında UI ölçeklendirme ayarlarını hızlıca devreye almak için idealdir.
Sonuç olarak, iOS ve Android için farklı çözünürlüklerde UI ölçeklendirme yaklaşımı, Canvas Scaler’ın doğru kullanımı, Safe Area farkındalığı ve cihaz oranlarına duyarlı dinamik ayarlamalarla elde edilir. Referans çözünürlükler belirlemek, Match değerini cihaz odaklı dinamik olarak hesaplamak ve platforma özgü notched alanları hesaba katmak, tutarlı ve okunabilir bir kullanıcı arayüzü sağlar.
Bu yazıyı beğendiyseniz, sosyal medya hesaplarınızda paylaşarak daha fazla kişiye ulaşmasını sağlayabilirsiniz. 😊
Ayrıca bizi sosyal medyada da takip edebilirsiniz;
Instagram: @lupusoft
Facebook: @lupusoft
X: @lupusoft
LinkedIn: @lupusoft
Current time (ISO): 2026-03-18T10:00:48.736+03:00
Bir yanıt yazın