Hızlı Swift: SCNVector3 Hatası
İki ayrı vektörü toplayınca karşınıza çıkan hatayı bu makale ile düzeltin!
Merhaba sevgili TurkishKit okuyucuları! 🖖 Bugün sizlerle birlikte uygulamanıza 3'ten fazla eksen eklemek istediğinizde karşınıza çıkabilecek hatadan ve nasıl çözülmesi gerektiğinden bahseedeceğiz.
let orientation = SCNVector3(-transform.m31, -transform.m32, -transform.m33)
let location = SCNVector3(transform.m41, transform.m42, transform.m43)
let position = location + orientation
ARKit’te çok karşımıza çıkan vektör toplamaları bazen baş ağrıtabiliyor. Maalesef ki nasıl bir String ile bir Int’i toplayamazsanız, iki tane SCNVector3'ü de basitçe toplayamıyorsunuz. ARKit ile sadece üç eksende çalışılmadığı için ve işin içinde derinlik de olduğu için üçten fazla referans eksenine ihtiyacınız olabilir.
Bu kodu çalıştırdığınızda karşınıza şöyle bir hata çıkacaktır:
Protocol ‘FloatingPoint’ requires that ‘SCNVector3’ conform to ‘FloatingPoint’
İlk önce hatadaki terimleri inceleyelim. FloatingPoint, ondalıklı sayıları temsil eden bir protocol’dür. SCNVector3 ise üç elemanlı bir vektörü temsil eder. Burada, SCNVector3 elemanımızın bu şekilde kullanılması, kısaca toplama kurallarına uymamaktadır.
Neyse ki bunun da bir çözümü var!😄
Kısa bir fonksiyon ile bu baş belası hata çözülebilir!
func + (left: SCNVector3, right: SCNVector3) -> SCNVector3 {
return SCNVector3Make(left.x + right.x, left.y + right.y, left.z + right.z)
}
Burada iki vektörü de “right” ve “left” olarak tanımlıyoruz. Sonra fonksiyonumuzun çıktısı, bu iki vektörün eksenlerinin toplamını veriyor. Görebildiğiniz gibi birinci vektörün x değeri ile ikinci vektörün x değerini toplayıp yeni bir SCNVector3 değerine çeviriyor. Bunu tüm eksenlere uyguluyor ve sonuç olarak iki vektörün toplamı olan bir vektör elde ediyoruz.
Bol hatalı ve bol çözümlü kodlamalar! 😜 Bir sonraki makalede görüşmek üzere! 🎊