Herkese merhaba bu yazıda geçenlerde başıma gelen bir sorundan ve çözümünden bahsedeceğim. Sorun şu ki biz oyun tasarlarken mutlaka UI elemanlarınada dokunduğumuz zaman bazı olayların olmasını isteyebiliriz. Normalde bu olayları yönetmek için mouse fonksiyonlarını (OnMouseDown,OnMouseUp vs.) kullanabiliyoruz fakat mouse fonksiyonları UI elemanlarında çalışmıyor neden çalışmıyor diyecek olursak benim kendi düşüncem mouse olaylarında bir yere tıklandığı zaman tıklanılan yerin koordinatları arka planda bir şekilde kamera kullanılarak hesaplanıyor ve işlemler gerçekleştiriliyor. Fakat biz UI elemanları kullanırken Canvas kullanmak zorunda olduğumuz için kamera bu alanı göremiyor böyle oluncada mouse fonksiyonları işlevsiz kalıyor. Bizde bu durumda başka bir fonksiyondan ve interfaceden yardım almak durumundayız. Bu implement edeceğimiz interface IPointerDownHandler interfacesi. Bir de kütüphane eklememiz lazım o da şu UnityEngine.EventSystems en son olarak da işlemlerimizi yapacağımız fonksiyonumuza gelelim o da OnPointerDown fonksiyonu aynı OnMouseDown fonksiyonu gibi içinde bulunduğu GameObject’e herhangi bir tıklanmak, dokunma artık ne derseniz bir etkileşim olursa bu fonkisyon tetiklenecek. Kullanacağınız GameObject’de herhangi bir rigidbody, collider olmasına gerek yok direk neyin içine yazarsanız çalışacaktır şimdi hemen toplu halde fonksiyonun kullanımına bakalım.
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems;//gerekli kütüphane public class BolumSecMenu : MonoBehaviour, IPointerDownHandler //gerekli arayüz { public void OnPointerDown(PointerEventData eventData) { Debug.Log(this.gameObject.name); } }
Yukarıda görüldüğü gibi kullanımı çok kolay ve OnMouseDown fonksiyonu ile çok benzer, burada dokunulan GameObjectin ismini yazdırdık sadece. Tabi OnPointerDown olurda OnPointerUp olmaz mı olur onun kullanımı da aynı şekilde sadece fonksiyon ismini değiştiriyoruz.
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems;//gerekli kütüphane public class ExampleClass : MonoBehaviour, IPointerUpHandler//gerekli arayüz { public void OnPointerUp(PointerEventData eventData) { Debug.Log("Mouse Bırakıldı"); } }
Bu olay çok basit eğer bir gün UI elemanlarına dokunma özelliği vermek isterseniz aklınızda bulunsun mouse fonksiyonları çalışmayacaktır, ben çözüm olarak bu yöntemi kullandım herkese iyi çalışmalar.