Unity 2D "transform.rotation" düzgün çalışmıyor

Aduketci

Hectopat
Katılım
10 Şubat 2019
Mesajlar
317
Snake oyununa benzer bir oyun yapmaya çalışıyorum fakat yılan sağa sola dönerken başını çevirmeyi bir türlü yapamadım. Transform.rotation deniyorum, bir sıkıntı çıkıyor. Aşağıda paylaştım.
Ve kod olarakta paylaşayım.
[CODE lang="csharp" title="Sıkıntı yaşadığım yer" highlight="9"] private void HandleInput()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
if (gridMoveDirection.y != -1)
{
gridMoveDirection.x = 0;
gridMoveDirection.y = +1;
transform.rotation = new Vector3(0, 0, 90); // Sıkıntı burada diğerlerinde sıkıntı yok.
}[/CODE]

Ve bir adam böyle yapıyor gördüm de anlayamadım ve hatalı çıktı onu da atayım.
[CODE lang="csharp" title="Farklı bir kod işe yaramadı."] transform.eulerAngles = new Vector3(0, 0, GetAngleFromVector(gridMoveDirection) - 90);




private float GetAngleFromVector(Vector2Int dir)
{
float n = Mathf.Atan2(dir.y, dir.x) + Mathf.Rad2Deg;
if (n < 0) n += 360;
return n;

}[/CODE]
 

Dosya Ekleri

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    28,1 KB · Görüntüleme: 54
Aslında açıklama herşeyi anlatıyor. transform.rotation Quaternion sınıfından türetilmiştir.

hata veren satırı şu şekilde yaparsan çözülür büyük ihtimal.
C#:
transform.rotation = Quaternion.Euler(new Vector3(0, 0, 90));
 
Aslında açıklama herşeyi anlatıyor. transform.rotation Quaternion sınıfından türetilmiştir.

hata veren satırı şu şekilde yaparsan çözülür büyük ihtimal.
C#:
transform.rotation = Quaternion.Euler(new Vector3(0, 0, 90));
Teşekkür ederim deniyorum şimdi ve alttaki kod nasıl bir şey?
Düzenleme: Oldu teşekkürler.
 
Son düzenleme:
Teşekkür ederim deniyorum şimdi ve alttaki kod nasıl bir şey?
Düzenleme: Oldu teşekkürler.
Rica ederim. Alttaki kodda GetAngleFromVector metodu bir vector alıyor. Bu vector aslında 2 nokta arasındaki delta y ve delta x degerlerini tutuyor(büyük ihtimal öyle). Arctan özelligi sayesinde, açı = atan(y/x) degerini buluyor. Bu buldugu değer radyandır.bunu açıya çevirebilmek için rad2deg sabit(57.29...) ile çarpıyor(kodda toplamış büyük ihtimal yanlış yazdınız çünkü çarpılması gerekiyor. Toplama hiçbir anlam ifade etmez). Artık 2 nokta arasındaki açıyı biliyor. Bunu da n degişkenine atamış. eğer n açısı negatif ise bunu 360 ile toplayıp pozitif karşılığını buluyor.
Bu kod tamamen temel basit trigonometri kuralları kullanılarak yazılmış.
 
Rica ederim. Alttaki kodda GetAngleFromVector metodu bir vector alıyor. Bu vector aslında 2 nokta arasındaki delta y ve delta x degerlerini tutuyor(büyük ihtimal öyle). Arctan özelligi sayesinde, açı = atan(y/x) degerini buluyor. Bu buldugu değer radyandır.bunu açıya çevirebilmek için rad2deg sabit(57.29...) ile çarpıyor(kodda toplamış büyük ihtimal yanlış yazdınız çünkü çarpılması gerekiyor. Toplama hiçbir anlam ifade etmez). Artık 2 nokta arasındaki açıyı biliyor. Bunu da n degişkenine atamış. eğer n açısı negatif ise bunu 360 ile toplayıp pozitif karşılığını buluyor.
Bu kod tamamen temel basit trigonometri kuralları kullanılarak yazılmış.
Arada fark var mı? Her türlü açıdan optimizasyon, buglar vs.
 
Arada fark var mı? Her türlü açıdan optimizasyon, buglar vs.
Tabiki var. Sen belirledigin bir açıda yön veriyorsun. Alttaki kod ise parametre olarak aldığı değeri hesaplayıp yönü buluyor. Optimizasyon olarak bilmiyorum. Ancak senin yazmış olduğun kod yapmaya çaıştığın oyuna daha uygun diyebilirim.
 

Geri
Yukarı