Unity’de Kaydırma (Swipe) Algılama

Mustafa Mert Aladağ
3 min readMay 13, 2021

Ekranı kaydırma (swipe) hareketiyle kontrol günümüz mobil oyunlarında oldukça popüler ve kullanışlı bir yöntemdir. Sonsuz koşu oyunlarından puzzle oyunlarına kadar birçok oyun türünde kullanılmakta olan bu mekaniği oyunlara sorunsuz bir şekilde entegre etmek oyunlarımız için hayati önem taşır. Bu makalemizde Unity oyun motoru üzerinden ekran kaydırma kontrollerini işleyeceğiz.

Öncelikle Unity Hub’dan ‘New’ butonuna bastıktan sonra projemizin ismini ve konumunu belirleyip 2D/3D seçeneklerinden birini seçerek yeni bir proje oluşturalım. Projemiz açıldıktan sonra ‘Assets’ klasörü içerisine sağ tıklayıp ‘Create C# Script’ diyelim ve ‘InputManager.cs’ adında yeni bir C# dosyası oluşturalım. Kodumuz Drag (sürükleme) davranışını kullanacağından aşağıdaki gibi gerekli kütüphane ve (interface) arayüzleri kodumuza uygulayalım. Drag davranışı hem bilgisayarda hem de mobil cihazlarda sorunsuzca kullanılabilir, fakat sadece dokunma destekleyen cihazlarda kullanılmasını isteseydik Touch sınıfını da kullanabilirdik. EventSystems kütüphanesini eklemeyi de unutmayalım.

IDragHandler, IBeginDragHandler ve IEndDragHandler arayüzlerini ekledikten sonra kodumuz bu arayüzlerin gerektirdiği metotların kullanılması yönünde bir uyarı verecektir. Çıkan hatanın üzerine tıklayıp arabirimi uygula diyelim.

OnBeginDrag metodu ekranda bir sürükleme davranışı başladığında, OnDrag metodu sürükleme metodunun çalıştığı süre boyunca ve OnEndDrag metodu ise sürükleme davranışının bittiği frame’de çalışacaktır.

Biz kodumuzu yukarı, aşağı, sağ ve sol olmak üzere 4 yönde çalışacak şekilde yazacağız. Kaydırma yönümüzü belirtmek için Direction adında bir enum oluşturmak kodumuzun ilerleyen aşamalarında bize fayda sağlayacaktır.

Herhangi bir yön verisi gelmediğinde kullanılacak olan bir None değeri de ekleyelim.

Şimdi global değişkenlerimizi ekleyelim. Sürükleme davranışımız için bir yön, başlangıç pozisyonu, bitiş pozisyonu, kaydırma eşiği (sürükleme davranışı için gereken başlangıç ve bitiş noktaları arasındaki minimum mesafe) ve sürüklemenin başlayıp başlamadığını kontrol etmek için bir adet bool değişken.

Awake metodumuzda değişkenlerimize başlangıç değerlerimizi verelim.

Sürükleme davranışı başladığında draggingStarted değerimiz true, startPos değişkenimiz ise etkinliğin gerçekleştiği noktanın koordinatları olarak atanmalıdır.

Sürükleme davranışı esnasında ise draggingStarted değerimiz true ise bitiş pozisyonumuzu Pointer’ımızın şu anki konumuna atıyoruz, ve aradaki farkı alıyoruz. Eğer fark vektörünün büyüklüğü swipeTreshold adını verdiğimiz kaydırma eşiğinden büyük ise yön belirleme işlemine başlıyoruz. Fark vektörünün x bileşeni y bileşeninden büyük ise yatay, değilse dikey bir kaydırma yapıyoruz. X sıfırdan büyük ise sağa, değilse sola; y sıfırdan büyük ise yukarı, değilse aşağı yönde bir kaydırma yapıyoruz. Eğer kaydırma eşiğini geçmediysek direction değerimizi None olarak atıyoruz.

Sürükleme davranışımız sona erdiğinde, eğer draggingStarted değeri true ve direction değerimiz None’dan farklı ise bu; dört yönden birini elde etmiş olduğumuzu ve bu veriyi oyunumuzda istediğimiz gibi kullanabileceğimizi gösterir. Ben konsola yazdırmayı tercih ettim fakat siz oyununuzda istediğiniz şekilde kullanabilirsiniz.

Kodun tam hali aşağıdaki gibidir:

NOT: Pointer eventleri arayüz üzerinde gerçekleştiğinden, bu kodu tüm ekranı kaplayan bir panel objesi üzerine iliştirmeyi unutmayın.

Unity’de sürükleme algılama temel olarak bu şekildeydi. Tabii ki yaratıcılığınıza ve ihtiyaçlarınıza göre daha farklı şekillerde de uygulanabilir. Umarım bu makale sizler için faydalı olmuştur. Daha fazlası için lütfen takipte kalın.

--

--

Mustafa Mert Aladağ

Jr. Game Developer, Software Engineering Student at Yasar University