Eğitimler Scriptleme / Doğrusal Enterpolasyon

 

Doğrusal Enterpolasyon

Oyun yaparken iki deger arasinda dogrusal olarak enterpolasyon yapmak bazen faydali olabilir. Bu da Lerp denen bir fonksiyon ile yapilir.  Dogrusal olarak enterpolasyon, verilen iki deger arasindaki bir miktar olan bir degeri bulmaktir Ornegin; 3 ile 5 arasinda %50 kullanarak  4 rakamini bulabilmek icin dogrusal enterpolasyon yaparabiliriz. Bunun nedeni de 4'un 3 ve 5 arasinda ikisine de  %50 mesafede olmasidir.

Unity icinde degisik turler icin kullanilabilecegimiz bircok Lerp fonsiyonu mevcuttur. Mesela biraz once kullandigimiz ornek icin esdeger Mathf.Lerp fonksiyonu olacaktir ve soyle gorunecektir:

Lerp kod

Mathf.Lerp fonksiyonu 3 float parameresi alir: biri erterpolasyondan gelicek degeri temsil eder,  digeri  gidilecek degeri temsil eder ve sonuncu da enterpolasyona olan mesafeyi temsil etmektedir. Bu durumda enterpolasyon degeri 0.5 olacaktir ki o da %50 anlamina gelir. Eger 0 olsaydi fonksiyon, gelecek olan degere, 1 olsaydi gidilecek olan degere donecekti.

Bir diger Lerp fonksiyonu ornegi Color.Lerp ve Vector3.Lerp icerir.  Bunlar da ayni Mathf.Lerp seklinde calisir fakat burada gelecek ve gidilecek degerler sirasiyla Color ve Vector3 turleri olacaktir. Iki durumda da ucuncu parametre ne kadar enterpolasyon yapilacagini temsil eden floattir.  Bu fonksiyonlarin sonucu verilen iki rengin bazi harmanlari ve verilen iki vektor arasindaki yolun bir yuzdesi olan bir vektor renk bulmaktir.

Baska bir ornege goz atalim:

lerp ve vector3.lerp

Bu durumda sonuc; (4,5,6) cunku 4: 1 ile 5 arasindaki yolun %75'i, 5: 2 ile 6 arasindaki yolun %75'i ve 6: 3 ile 7 arasindaki yolun %75'idir. Ayni prensip Color.Lerp kullanirken de uygurlanir. Color(Renk) yapisinda renkler kirmizi,mavi,yesil ve alfa olan 4 floatla temsil edilir. Lerp kullanirken bu floatlar Mathf.Lerp ve Vector3.Lerp ile oldugu gibi enterpolasyonludur.  Bazu durumlarda,  Lerp fonksiyonu bir degeri zaman uzerinden duzenlemek icin kullanilabilir. Asagidaki koda bir bakin.

lerp fonsiyonu

Eger isigin yogunlugu 0'a ayarlanirsa ilk guncellemeden sonra 4'e ayarlanacaktir. Sonraki karede 6'ya daha sonrakinda 7 ve sonraisnda 7.5 ve bu boyle gider. Boylece bircok karede isigin yogunlugu 8e dogru bukulecek fakat degisme orani hedefine yaklastikca azalacaktir.  Bunun bircok kare boyunca gerceklestigini unutmayin. Bunun kare hizina bagli olmamasini isteseydik, kod soyle gorunecekti:

lerp ve vector3

Bu da demek olacakti ki yogunluk her kare yerine  her saniyeye gore degisecekti.

Bir degeri hafifleterek duzenlerken kullanilacak en iyi fonksiyonnun SmoothDamp oldugunu unutmayin. Lerp fonksiyonunu sad ve sadece istediginiz efektten emin oldugunuzda kullanmayi tercih edin.