-
Bu bölümde; mobil cihazlarda iki parmakla yakınlaştırma/uzaklaştırma gibi standart dokunmatik kontrollerin üzerinden geçeceğiz.
-
Bu dokunmatik kontroller ana kameraya bir script(kod) eklenerek yapılacaktır.
-
Sahnedeki ana kamerayı seçiniz.
-
Ardından,
"Add Component/New Script" butonlarına basarak kameraya yeni bir C# kodu ekliyoruz.
-
Script'in adını "PinchZoom" koyuyoruz.
-
Bu işlem bittikten sonra,
"Create and Add" butonuna tıklayınız.
-
Şimdi,
Script'e çift tıklayarak düzenlemek için açabiliriz.
-
Hadi sınıfın gövdesini temizleyerek kendimize temiz bir yer açalım :)
-
İki parmakla yakınlaştırmanın prensibi şöyledir..
(Mobil cihazlarda)
-
Öncelikle: iki parmağın da KESİN OLARAK mobil cihazla
temas halinde olduğundan emin olmalıyız.
-
Ardından, ekrana temas halindeki iki parmağın
dokunma anındaki karede ve bir önceki karede aralarındaki mesafeyi bilmeliyiz.
-
Eğer ekrana dokunan parmaklar arasındaki mesafe küçüldüyse parmaklar birbirine yaklaşmıştır.
-
Bu durumda UZAKLAŞTIRMA yapmalıyız.
-
Benzer şekilde, parmaklar arasındaki mesafe arttıysa YAKINLAŞTIRMA yapmalıyız.
-
Burada yapmamız gereken ilk şey..
-
Birkaç public float değişken yazmaktır.
(public = heryerden erişime açık)
(float = küsüratlı sayı)
-
Bu değişkenler yakınlaştırma/uzaklaştırma esnasındaki hızı ayarlamamızı sağlayacak.
-
İki değişkene ihtiyacımız var..
-
..bu şekilde hem Perspective hem Orthographic kameraların hızlarını birbirinden bağımsız olarak ayarlayabiliriz.
-
Bu değişkenleri sırasıyla;
perspectiveZoomSpeed ve orthoZoomSpeed olarak adlandıralım.
-
Aynı zamanda varsayılan değerleri 0,5 olarak verelim.
-
Cihazdaki dokunma girdileri Update döngüsünde zamanla tespit edildiğinden
-
Genellikle en iyisi,
bu girdilerle Update fonksiyonunda uğraşmaktır.
-
Ancak, cihaza kesin olarak iki parmak dokunuyorsa birşey yapmak istiyoruz.
-
Bunu "Input.touchCount" özelliğini kullanarak kontrol edebiliriz.
-
Artık cihaza, kesin olarak iki parmağın dokunduğundan emin olduğumuzdan..
-
..bu dokunmaları kendi değişkenlerimizde depolayabiliriz.
-
Bu şekilde Input sınıfındaki özelliklere sürekli erişmek zorunda kalmayız.
-
Bu dokunma girdilerine Input sınıfındaki GetTouch() fonksiyonuyla ulaşacağız.
-
Sadece iki dokunma girdisi olduğundan,
-
Bu girdiler dokunma girdileri dizisindeki 0. ve 1. elemanlar olmalıdır.
-
Bu dokunmaların birer kopyalarını almak için GetTouch() fonksiyonuna 0 ve 1 değerlerini verebiliriz.
-
Şimdi dokunma bilgileri elimizde olduğuna göre..
-
..bir önceki karede hangi pozisyonlarda olduklarını bilmeliyiz.
-
Bunu,
şu anki pozisyonlarından delta pozisyonlarını çıkararak buluruz.
-
Her bir karede parmaklar arasındaki mesafeyi bulup..
-
..bu bilgiyi kullanarak yakınlaştırma mı uzaklaştırma mı olacağını kestiririz.
-
Her iki karede de parmaklar arasındaki mesafeyi bulabilmek için..
-
Bir parmağın pozisyonunu diğerininin pozisyonundan çıkararak bir vektör elde ederiz.
-
Ardından,
O vektörden, basitçe büyüklük değerini buluruz.
-
Bunu bir adımda, parantez içinde vektörleri birbirinden çıkarıp,
nokta(.) operatörünü kullanarak yaparız.
-
"Delta" terimini kullanıyoruz çünkü..
-
..bu terim iki veri parçacığı arasındaki değişimi ifade eder.
-
Her karede parmaklar arasındaki mesafeyi bulduğumuza göre..
-
Artık o mesafeler arasındaki farkları bulabiliriz.
-
Bu sefer çıkarma işlemindeki sıralama önemli.
-
Geçerli(şimdiki) karedeki parmaklar arasındaki mesafeden,
-
bir önceki karedeki mesafeleri çıkarırız.
-
Geçerli karedeki mesafe bir önceki karedeki mesafeden büyükse
negatif bir sonuç verir.
-
Bu da, parmaklar birbirinden uzaklaşıyor demektir.
-
Eğer parmaklar birbirinden uzaklaşıyorsa, yakınlaşma yapmamız gerekir.
-
FieldOfView (Perspektif kamera için) ,
OrtographicSize (Ortographic kamera için) azaltırız.
-
Bu koşullarda ya FieldOfView ya da OrtographicSize özelliklerini küçültmek istediğimiz için..
-
..iki değeri birbirinden çıkarmanın doğru yolu budur.
-
Kameranın özelliklerini değiştirmeden önce,
-
Kamera Orthographic Mod'da mı yoksa Perspective Mod'da mı bilmemiz gerekiyor.
-
Eğer Orthographic Mod'da ise kameranın orthographicSize değerini..
-
..mesafedeki değişim ile orthographic yakınlaşma hızını çarparak ayarlayabiliriz.
-
Aynı zamanda, kameramızın orthographicSize değerinin sıfırın altına düşmediğinden emin olmalıyız.
-
Eğer düşerse, görüntü ters döner.
(isterseniz deneyin :))
-
Bunu önlemek için..
-
Mathf sınıfından Max isimli fonksiyon arkadaşımızı kullanacağız.
-
Bu fonksiyon kendisine verilen en büyük parametreyi döndürür.
-
Kameranın orthograpicSize değerini ve 0,1 değerini vereceğiz.
-
Bu şekilde eğer kamera büyüklüğü 0,1 değerinin altına düşerse..
-
..tekrar 0,1 değerine çekebiliriz.
-
Şimdi, kamera ortografik modda değilse..
-
..perspektif modda olduğunu biliriz :)
-
bu durumda FieldOfView değerini değiştirmeliyiz.
-
FieldOfView değerini aynı miktarda ama perspectiveZoomSpeed kullanarak ayarlarız.
-
Tabi yine kameranın görüş alanını sınırlamak istiyoruz.
-
Ancak,
-
Görüş alanını bir açı değeri olduğundan,
-
0 ile 180 değerleri arasına çekmeliyiz.
-
Bunu Mathf sınıfından Clamp fonksiyonunu kullanarak yaparız.
-
Bu fonksiyon 3 değer alır.
-
Bir = sınırlamak istediğiniz değer,
-
iki = alabileceği en küçük değer,
-
üç = alabileceği en büyük değer.
-
Bizim sınırlandırmak istediğimiz değer,
kameranın görüş alanı
-
0,1 ile 179,9 değerleri arasında olmasını istiyoruz.
-
Kendi yakınlaştırma/uzaklaştırma sisteminizi yaparken,
-
kendinize uygun bir fieldOfView ve ortographicSize değeri seçebilirsiniz.
-
Bu kodda gösterilen limit değerlerini kullanıyoruz..
-
..çünkü uç koşullarda kabul edilebilir sonuçlar veriyor.
-
Bu kodumuzun sonuydu. Şimdi sıra test etmeye geldi :)
-
Bu noktada,
cihazınızın hazır olduğunu ve test için ayarlanmış olduğunu varsayıyoruz.
-
Cihazı nasıl ayarlayacağınızı bilmiyorsanız, cihazın dökümantasyonuna bakın.
-
(Google da "unity android/ios device configuration" diye aratın)
-
artık , File/Bulid Settings 'e tıklayarak projeyi build edebiliriz.
-
üzerinde çalıştığımız sahneyi build'e eklemeliyiz.
-
Eğer hala sahneyi kaydetmediyseniz şimdi kaydedin.
-
Ardından Build And Run butonuna tıklayın.
-
Gördüğünüz gibi parmaklarımızı birbirlerine doğru yaklaştırdığımızda..
-
..kamera uzaklaşıyor.
-
Parmaklarımız birbirlerinden uzaklaştığında, kamera yaklaşıyor.