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

Unity'de IScrollHandler ile UI Kaydırma Olaylarını Yönetme

Paylaşan: Unity Eğitim 25 October 2025 8 dakika okuma 55 görüntülenme

Unity'de IScrollHandler ile UI Kaydırma Olaylarını Yönetme

Unity geliştiricileri için kullanıcı arayüzü (UI) etkileşimleri, oyun deneyimini zenginleştiren temel unsurlardan biridir. Fare tekerleği veya dokunmatik yüzey hareketleri gibi kaydırma olayları, menülerde gezinmekten, kamera yakınlaştırmaya kadar birçok farklı işlev için kullanılabilir. Unity'nin Event System'ı, bu tür olayları yakalamak için çeşitli arayüzler sunar ve bunlardan biri de IScrollHandler'dır. Bu makalede, Unity IScrollHandler arayüzünü kullanarak UI elementleriniz üzerinde kaydırma olaylarını nasıl yakalayacağınızı ve özelleştirilmiş davranışlar sergileyeceğinizi detaylı bir şekilde inceleyeceğiz.

IScrollHandler Nedir ve Nasıl Çalışır?

IScrollHandler, UnityEngine.EventSystems namespace'i altında bulunan bir arayüzdür. Adından da anlaşılacağı gibi, kaydırma (scroll) olaylarını işlemek için tasarlanmıştır. Bu arayüzü bir MonoBehaviour sınıfına uyguladığınızda, Unity'nin Event System'ı, fare tekerleği veya dokunmatik yüzeyden gelen kaydırma hareketlerini yakalayarak, script'inizdeki OnScroll() metodunu tetikler.

OnScroll() metodu, PointerEventData tipinde bir parametre alır. Bu eventData objesi, kaydırma olayı hakkında önemli bilgiler içerir. En kritik bilgi ise eventData.scrollDelta'dır. Bu Vector2 değeri, kaydırma hareketinin yönünü ve miktarını belirtir. Genellikle dikey kaydırma için scrollDelta.y, yatay kaydırma için ise scrollDelta.x kullanılır. Fare tekerleği kaydırmalarında scrollDelta.y değeri pozitifse yukarı, negatifse aşağı kaydırıldığını gösterir.

Unity IScrollHandler, özellikle standart ScrollRect bileşeninin sunduğu sınırlı kaydırma işlevselliğinin dışına çıkmak istediğinizde devreye girer. Örneğin, bir liste veya metin alanını kaydırmak yerine, bir UI elementinin boyutunu değiştirmek, bir 3D objeyi döndürmek veya özel bir menüdeki seçenekleri değiştirmek isteyebilirsiniz.

Adım Adım Uygulama: Özel Bir Kaydırma Davranışı Oluşturma

Unity IScrollHandler kullanarak kendi kaydırma davranışınızı oluşturmak oldukça basittir. İşte adımlar:

  1. Yeni Bir C# Script'i Oluşturun: Projenizde yeni bir C# script'i oluşturun (örneğin, CustomScrollHandler).
  2. IScrollHandler Arayüzünü Uygulayın: Oluşturduğunuz script'i IScrollHandler arayüzünden türetin.
  3. OnScroll Metodunu Implement Edin: IScrollHandler arayüzünü uyguladığınızda, OnScroll() metodunu implement etmeniz gerekecektir.
  4. Script'i Bir UI Elementine Ekleyin: Bu script'i, kaydırma olaylarını dinlemesini istediğiniz herhangi bir UI elementine (örneğin, bir Panel, Image veya Button) ekleyin. Bu elementin aynı zamanda bir Graphic bileşeni (Image, Text vb.) olmalı ve Raycast Target özelliği açık olmalıdır, aksi takdirde Event System olayı algılayamaz.
using UnityEngine; 
using UnityEngine.EventSystems; 
using UnityEngine.UI; // DebugText için gerekli olabilir

public class CustomScrollHandler : MonoBehaviour, IScrollHandler 
{
    [SerializeField] private Text debugText; // Kaydırma bilgisini göstermek için
    [SerializeField] private float zoomSensitivity = 0.1f; // Yakınlaştırma hassasiyeti

    public void OnScroll(PointerEventData eventData)
    {
        // Kaydırma yönünü ve miktarını alıyoruz
        Vector2 scrollDelta = eventData.scrollDelta;

        // Genellikle dikey kaydırma için scrollDelta.y kullanılır
        float scrollAmount = scrollDelta.y;

        Debug.Log("Kaydırma Algılandı: " + scrollAmount);

        // DebugText varsa, kaydırma bilgisini güncelleyelim
        if (debugText != null)
        {
            debugText.text = "Kaydırma: " + scrollAmount.ToString("F2");
        }

        // Örnek: Bu UI elementinin ölçeğini kaydırma ile değiştirme (zoom efekti)
        // Mevcut ölçeği al
        Vector3 currentScale = transform.localScale;

        // Yeni ölçeği hesapla
        float newScale = currentScale.x + scrollAmount * zoomSensitivity;

        // Ölçeği belirli sınırlar içinde tut (örneğin, 0.5 ile 3 arasında)
        newScale = Mathf.Clamp(newScale, 0.5f, 3f);

        // Yeni ölçeği uygula
        transform.localScale = new Vector3(newScale, newScale, newScale);
    }
}

Yukarıdaki örnekte, script'i eklediğiniz UI elementinin ölçeğini fare tekerleğiyle değiştirebilirsiniz. Bu, bir harita veya görsel üzerinde yakınlaştırma/uzaklaştırma efekti oluşturmak için harika bir yoldur.

IScrollHandler vs. ScrollRect: Ne Zaman Hangisini Kullanmalı?

Unity'de kaydırma denince akla ilk gelen bileşen genellikle ScrollRect'tir. Ancak Unity IScrollHandler ile ScrollRect farklı amaçlara hizmet eder:

  • ScrollRect: Belirli bir Content (içerik) alanını, bir Viewport (görüntüleme alanı) içinde kaydırmak için tasarlanmış hazır bir bileşendir. Genellikle listeler, uzun metinler veya resim galerileri gibi içeriği olanaklı kılar. Dikey ve yatay kaydırma çubukları, esneklik ve atalet gibi özellikleri doğrudan sunar.
  • IScrollHandler: Daha düşük seviyeli bir arayüzdür. Amacı sadece bir UI elementi üzerinde bir kaydırma olayının gerçekleştiğini bildirmektir. Bu olaya nasıl tepki vereceğiniz tamamen size kalmıştır. IScrollHandler, kaydırma olayını yakalar ve istediğiniz herhangi bir mantığı çalıştırmanıza olanak tanır. İçerik kaydırma dışındaki özel etkileşimler için idealdir.

Özetle, eğer bir içeriği standart bir şekilde kaydırmak istiyorsanız ScrollRect kullanın. Eğer kaydırma olayını yakalayıp tamamen farklı bir davranış (zoom, 3D obje kontrolü, özel menü geçişleri vb.) tetiklemek istiyorsanız Unity IScrollHandler sizin için doğru araçtır.

Pratik İpuçları ve Kullanım Senaryoları

  1. UI Elementlerine Zoom Efekti Uygulama: Yukarıdaki kod örneğinde görüldüğü gibi, bir resim, harita veya herhangi bir UI panelini fare tekerleğiyle yakınlaştırıp uzaklaştırabilirsiniz. Bu, özellikle detaylı bilgi içeren arayüzlerde kullanıcı deneyimini artırır.
  2. 3D Sahne Etkileşimi: Bir UI paneli üzerinde gerçekleşen kaydırma olaylarını yakalayarak, sahnede bulunan bir 3D kameranın yakınlaştırma düzeyini veya bir objenin rotasyonunu kontrol edebilirsiniz. Örneğin, bir ürün görselleştirme uygulamasında ürün detaylarını incelerken, UI üzerindeki kaydırma ile ürünü döndürebilirsiniz.
  3. Özel Menü veya Liste Geçişleri: Standart ScrollRect kullanmadan, dikey kaydırma olaylarını algılayarak bir menüdeki aktif elemanı değiştirebilir veya sayfa sayfa geçiş yapan bir liste yapısı oluşturabilirsiniz. Bu, daha stilize ve kontrol edilebilir menüler tasarlamanıza olanak tanır.
  4. Kaydırma Hassasiyeti Ayarı: eventData.scrollDelta değerini doğrudan kullanmak yerine, bir çarpan (zoomSensitivity gibi) ekleyerek kaydırma hızını ve tepkisini ayarlayabilirsiniz. Bu, farklı kullanıcı tercihleri veya farklı kaydırma davranışları için esneklik sağlar.

Yaygın Hatalar ve Çözümleri

  • Event System Yokluğu: Sahnenizde bir EventSystem objesi bulunmuyorsa, kaydırma olayları dahil hiçbir UI olayı algılanmayacaktır. Çözüm: Hierarchy penceresinde sağ tıklayıp UI -> Event System seçeneğini kullanarak sahnenize bir EventSystem ekleyin.
  • Raycast Target Kapalı: Unity IScrollHandler'ı implement eden UI elementinin üzerinde bir Graphic bileşeni (Image, Text, Raw Image vb.) olmalı ve bu bileşenin Raycast Target özelliği açık olmalıdır. Aksi takdirde, Event System bu elementin üzerine yapılan fare olaylarını algılayamaz. Çözüm: İlgili UI elementinin Graphic bileşenindeki Raycast Target kutucuğunu işaretleyin.
  • Bloklayan UI Elementleri: Bazen, IScrollHandler'ı uyguladığınız elementin üzerinde başka bir UI elementi (özellikle tam ekran kaplayan bir panel) bulunabilir ve bu elementin Raycast Target özelliği açık olabilir. Bu durumda, olaylar üstteki element tarafından tüketilir ve alt katmanlara ulaşmaz. Çözüm: Üstteki elementin Raycast Target'ını kapatın veya CanvasGroup bileşeni ekleyip blocksRaycasts özelliğini false yapın.
  • Yanlış Elementte Script: Kaydırma olayını dinlemesini istediğiniz element yerine yanlış bir elemente script'i eklemek. Çözüm: Script'in doğru UI elementine (örneğin, bir panel veya görsele) eklendiğinden emin olun.

Performans ve Optimizasyon Notları

OnScroll() metodu, her kaydırma olayında (genellikle fare tekerleğinin her "tıkında" veya dokunmatik yüzeyin her hareketinde) çağrılır. Bu nedenle, bu metodun içinde çok yoğun veya performansı etkileyici işlemler yapmaktan kaçınmak önemlidir:

  • Hafif İşlemler: OnScroll() içinde sadece gerekli mantığı çalıştırın. Ağır matematiksel hesaplamalar, dosya okuma/yazma veya karmaşık sorgular gibi işlemlerden kaçının.
  • GetComponent Çağrılarından Kaçının: Sıkça ihtiyaç duyduğunuz bileşen referanslarını (örneğin, Text veya Image) Awake() veya Start() metodlarında önbelleğe alın. Her OnScroll() çağrısında GetComponent<T>() kullanmak performansı düşürebilir.
  • Koşullu İşlemler: Eğer kaydırma olayı sadece belirli koşullar altında işlenmeli ise, metodun başında bu koşulları kontrol edin ve gereksiz hesaplamaları atlayın.

Sonuç

Unity IScrollHandler arayüzü, Unity'nin Event System'ının güçlü ve esnek bir parçasıdır. Geliştiricilere, standart ScrollRect bileşeninin ötesinde, kaydırma olaylarına özelleştirilmiş ve yaratıcı tepkiler verme imkanı sunar. Bu makaledeki bilgiler ve pratik ipuçları sayesinde, UI elementlerinizle daha dinamik ve etkileşimli deneyimler oluşturmak için Unity IScrollHandler'ı etkin bir şekilde kullanabilirsiniz. Unutmayın, kullanıcı deneyimini zenginleştirmenin yolu, UI etkileşimlerini derinlemesine anlamaktan ve ustaca uygulamaktan geçer.

🧠 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!