Menu
CoddyTech

Kinematik Cisimler

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

Hareketli platformlar, asansörler ve kapılar katı nesneler gibi çarpışmalı, ancak üzerlerine ne düşerse düşsün düşmemeli veya itilip hareket ettirilmemelidir. Buna kinematik gövde denir: rb.isKinematic = true ayarını yapın; böylece yerçekimi, kuvvetler ve darbeler artık onu hareket ettirmez. Çarpıştırıcısı yine de hesaba katılır; bu nedenle dinamik bir gövde (fiziğin hareket ettirdiği bir gövde) ona bir duvara çarpar gibi çarpar ve zemine basar gibi üzerinde durur. Kinematik bir gövdeyi 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ımdan sonra bulunacağı konumu alır; bu nedenle kod, Time.fixedDeltaTime kullanarak bir adımlık hareket miktarını 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ıyorsunuz? Bu, nesneyi ışınlar ve fizik, hareket ettiğini hiçbir zaman öğrenemez: kayan bir platformun üzerindeki sandık, platformla birlikte taşınmak yerine geride kalır. MovePosition, fiziğe gövdenin adım sırasında yeni konumuna gittiğini bildirir; böylece temas ettiği nesneler düzgün biçimde taşınır ve itilir. AddForce kinematik bir gövdede hiçbir işe yaramaz; ayrıca kinematik gövdeler statik çarpıştırıcılarla veya birbirleriyle asla çarpışmaz: yalnızca dinamik gövdeler onlara çarpar.

challenge icon

Görev

Kolay

Mavna lavın üzerinde asılı duruyor ve ok tuşları onu x ekseni boyunca speed m/s hızla (Inspector'da 2) sağa ve sola kaydırmalı. Şu anda Rigidbody'si sıradan bir Rigidbody olduğu için lavın içine düşüyor.

  • Oyun başladığında mavnayı kinematik yap, böylece havada asılı kalır ve ona çarpan hiçbir şey onu itemez.
  • Ham Horizontal eksenini kullanarak FixedUpdate() içinde MovePosition ile hareket ettir.

Play'e basıp mavnayı kaydır, ardından Check'e bas.

Kendin dene

using UnityEngine;

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

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Mavnayı kinematik yap
    }

    void FixedUpdate()
    {
        // Ok tuşlarıyla mavnayı x ekseni boyunca kaydır
    }
}
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