Menu
CoddyTech

Yumuşakça Dön

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 43 / 63.

transform.rotation değerini doğrudan yeni bir rotasyona ayarlamak, nesneyi tek bir karede döndürür. Quaternion.RotateTowards(current, goal, maxDegrees), current rotasyonunu goal yönüne doğru en fazla maxDegrees kadar döndürür ve hedefi asla geçmez. Adım olarak turnSpeed * Time.deltaTime kullanıldığında nesne sabit bir hızla döner ve tıpkı MoveTowards konumlarda yaptığı gibi hedefinde tam olarak durur. Bu ayçiçeği güneşi saniyede 30 derece hızla takip eder:

public Transform sun;
public float turnSpeed = 30f;

void Update()
{
    Quaternion goal = Quaternion.LookRotation(sun.position - transform.position);
    transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);
}

90 derece uzaktaki bir güneş, ayçiçeğinin her biri 30 derece olan 3 saniyede dönmesini sağlar. En kısa yönde döner ve hedef her karede yeniden hesaplandığından hareket eden bir güneşi takip eder.

Quaternion.Slerp(a, b, t), Vector3.Lerp noktalar için neyse, a ile b arasındaki yolun t kadarlık kısmındaki rotasyondur. Update() içinde Slerp(transform.rotation, goal, 5f * Time.deltaTime) şeklinde yazıldığında, her karede kalan açının bir kısmı kadar döner: önce hızlı, hedefe yaklaştıkça giderek daha yavaş; sabit bir hızla dönmez ve hedefe hiçbir zaman tam olarak ulaşmaz. Bu yumuşak geçiş, kamera veya dönen bir kafa için uygundur. Dönüş hızı oyun kuralı olduğunda, örneğin saniyede 60 derece dönen bir top için RotateTowards kullanın.

challenge icon

Görev

Orta

Baykuş, onu işaret ettiğin yöne bakmak için döner. Her ok, bakacağı yeni bir yön verir: yukarı +z, sağ +x, aşağı -z, sol -x. Bir tuşa basıldığında o yöne, saniyede turnSpeed (180) derece hızla, sabit bir hızda dönmeye başlar ve tuş bırakıldıktan sonra da dönüşünü tamamlayarak tam olarak yeni yönde durur.

Play'e bas, ok tuşlarına bas, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class Owl : MonoBehaviour
{
    public float turnSpeed = 180f;

    void Update()
    {
        // Yukarı, sağ, aşağı, sol: saniyede turnSpeed derece hızla +z, +x, -z, -x yönlerine dön.
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Fizik ve Oynanış bölümündeki tüm dersler