Menu
CoddyTech

Kinematik Cisimler

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

Hareketli platformların, asansörlerin ve kapıların katı cisimler gibi çarpışması gerekir; ancak bunlar düşmemeli veya üzerlerine konan şeyler tarafından itilip hareket ettirilmemelidir. Buna kinematik cisim denir: rb.isKinematic = true ayarlayın; artık yer çekimi, kuvvetler ve darbeler onu hareket ettirmez. Çarpıştırıcısı yine de etkilidir; bu nedenle dinamik bir cisim (fiziğin hareket ettirdiği cisim) ona duvara çarpar gibi çarpar ve zemine basar gibi üzerinde durur. Kinematik cismi rb.MovePosition ile kendiniz hareket ettirirsiniz.

Bu asansör, top noktasına ulaşana kadar saniyede lift m hızla yükselir. MovePosition, bu adımın sonunda bulunulacak konumu alır; bu nedenle kod, Time.fixedDeltaTime kullanarak bir adımlık hareketi ekler:

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.isKinematic = true;
}

void FixedUpdate()
{
    if (rb.position.y < top)
    {
        rb.MovePosition(rb.position + Vector3.up * lift * Time.fixedDeltaTime);
    }
}

Neden transform.position ayarlamıyoruz? Bu, nesneyi ışınlar ve fizik, onun hareket ettiğini hiçbir zaman öğrenemez: kayan bir platformun üzerindeki sandık, platformla birlikte taşınmak yerine geride kalır. MovePosition, fiziğe cismin bu adım sırasında yeni konumuna gittiğini bildirir; böylece temas ettiği şeyler gerektiği gibi taşınır ve itilir. Kinematik bir cisim üzerinde AddForce hiçbir etki göstermez ve kinematik cisimler statik çarpıştırıcılarla veya birbirleriyle asla çarpışmaz: yalnızca dinamik cisimler onlara çarpar.

challenge icon

Görev

Kolay

Mavnayı lavın üzerinde asılı tut ve ok tuşlarıyla kaydır.

  1. Start() içinde rb.isKinematic = true; ayarla.
  2. FixedUpdate() içinde float h = Input.GetAxisRaw("Horizontal"); değerini oku ve rb.MovePosition(rb.position + Vector3.right * h * speed * Time.fixedDeltaTime); çağrısını yap.

“Oyna” düğmesine bas ve mavnayı kaydır: mavna havada asılı kalır ve dron çarparak seker. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Barge : MonoBehaviour
{
    public float speed = 2f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Mavnanın kinematik olmasını sağla
    }

    void FixedUpdate()
    {
        // Ok tuşlarıyla mavnayı x ekseni boyunca kaydır
    }
}

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

Kendi başına pratik yap: Unity playground