Çözüldü Kod bloğunda ne demek istiyor?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Yuny

Hectopat
Katılım
31 Temmuz 2018
Mesajlar
531
Makaleler
2
Çözümler
1
Kod 2D karakterin dönmesini sağlamak için kullanılıyor. Bunu yapmanın bir sürü farklı yolu var ama yabancı bir YouTube kanalı şu şekilde yapıyor. Açıkçası bilmediğim çok fazla şey içeriyor. O yüzden yabancı bloglara baksam da (Türkçe bulamadım) işin içinden çıkamadım. Kod şu şekilde.

void Update() { var movement = Input.GetAxis("Horizontal"); if (!Mathf.Approximately(0, movement)) transform.rotation = movement > 0 ? Quaternion.Euler(0, 180, 0) : Quaternion.identity; }
Approximately metodunun kullanımını anlayamadım ve bu şekilde de bir if döngüsü yazımı daha önce görmedim açıkçası.
 
Çözüm
hiç böyle bir şey görmemiştim ve açıkçası soru işareti neden var ve en sona neden
transform.rotation = movement > 0 ? Quaternion.Euler(0, 180, 0) : Quaternion.identity;

Bu satırda movement 0 dan büyükse rotasyonu 0,180,0 yap değilse 0,0,0 yap demek istiyor.

değişken = şart ? true ise olacak şey : false ise olacak şey
Yukarıda yazdığım gibi bir değişkene şartlı bir şekilde atama yapılabiliyor. Quaternion.identity ise objenin rotasyonunu 0,0,0 a çekiyor yani sıfırlıyor. Son olarak Mathf.Approximately 2. parametre 1. paratmereye yakınsa true döndürüyor diye biliyorum.
If statement'inda {} acilmamissa, icindeki boolean condition true ise sadece bir sonraki statement kosturulur.

Alt taraftaki assignment'ta ise ternary operator kullanilmis yani, yataydaki hareket pozitif yonde ise 180 derece rotasyon yapilsin, negatif yondeyse rotasyon yapilmasin denilmis.
 
Mathf. Approximately iki sayının benzer olup olmadığına bakıyor.
"movement" değişkeni 0 veya sıfıra yakın bir değer değilse rotasyon yapmasını söylüyor.
Çok küçük mouse hareketlerini yansıtmamak için böyle yapmış olabilir.
 
Mathf. Approximately iki sayının benzer olup olmadığına bakıyor.
"movement" değişkeni 0 veya sıfıra yakın bir değer değilse rotasyon yapmasını söylüyor.
Çok küçük mouse hareketlerini yansıtmamak için böyle yapmış olabilir.
İki sayının benzerliği derken biraz daha açar mısınız?
If statement'inda {} acilmamissa, icindeki boolean condition true ise sadece bir sonraki statement kosturulur.

Alt taraftaki assignment'ta ise ternary operator kullanilmis yani, yataydaki hareket pozitif yonde ise 180 derece rotasyon yapilsin, negatif yondeyse rotasyon yapilmasin denilmis.
Hocam kodun ne dediğini anladım da
C#:
transform.rotation = movement > 0 ? Quaternion.Euler(0, 180, 0) : Quaternion.identity;
hiç böyle bir şey görmemiştim ve açıkçası soru işareti neden var ve en sona neden
C#:
Quaternion.identity;
yazdık anlayabilmiş değilim
 
hiç böyle bir şey görmemiştim ve açıkçası soru işareti neden var ve en sona neden
transform.rotation = movement > 0 ? Quaternion.Euler(0, 180, 0) : Quaternion.identity;

Bu satırda movement 0 dan büyükse rotasyonu 0,180,0 yap değilse 0,0,0 yap demek istiyor.

değişken = şart ? true ise olacak şey : false ise olacak şey
Yukarıda yazdığım gibi bir değişkene şartlı bir şekilde atama yapılabiliyor. Quaternion.identity ise objenin rotasyonunu 0,0,0 a çekiyor yani sıfırlıyor. Son olarak Mathf.Approximately 2. parametre 1. paratmereye yakınsa true döndürüyor diye biliyorum.
 
Çözüm
transform.rotation = movement > 0 ? Quaternion.Euler(0, 180, 0) : Quaternion.identity;

Bu satırda movement 0 dan büyükse rotasyonu 0,180,0 yap değilse 0,0,0 yap demek istiyor.

değişken = şart ? true ise olacak şey : false ise olacak şey
Yukarıda yazdığım gibi bir değişkene şartlı bir şekilde atama yapılabiliyor. Quaternion.identity ise objenin rotasyonunu 0,0,0 a çekiyor yani sıfırlıyor. Son olarak Mathf.Approximately 2. parametre 1. paratmereye yakınsa true döndürüyor diye biliyorum.
Çok teşekkür ederim büyük bir kısmını anladım fakat son olarak anlamadığım şey parametreler arasındaki yakınlığı neye göre nasıl belirliyor?
 

Direk olarak if(movement != 0) yazsaydık ne değişecekti?​


Titreme gibi küçük farklılıkları filtrelemek için kullanılmış olmalı.
Mantığı aşağıdaki gibi şu şekilde(epsilon = çok küçük bir sayı )

C#:
 bool isEqual(float a, float b)
    {
        if (a >= b - Mathf.Epsilon && a <= b + Mathf.Epsilon)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
 

Yeni konular

Geri
Yukarı