Menu
CoddyTech

Çarpınca Kırıl

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

Darbe ne kadar şiddetliydi? collision.relativeVelocity, iki nesnenin karşılaştıkları anda birbirlerine ne kadar hızlı yaklaştıklarını gösterir; magnitude değeri ise m/s cinsinden çarpma hızıdır. Bu, hızların farkıdır: 10 m/s hızla giden bir araba, aynı yönde 8 m/s hızla giden bir arabaya çarptığında darbe hızı yalnızca 2 m/s olur ve her iki araba da aynı darbe hızını görür.

Bu yumurta, crackSpeed değerinden daha hızlı yere çarptığında kırılır. 1 m yükseklikten bırakıldığında yaklaşık 4.4 m/s hızla çarpar (2 x 9.81 x 1'in karekökü); 2 m yükseklikten bırakıldığında ise yaklaşık 6.3 m/s hızla çarpar:

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

Neden yumurtanın kendi rb.linearVelocity değeri değil? OnCollisionEnter çalıştığında fizik motoru çarpışmayı zaten işlemiş olur; dolayısıyla yumurtanın hızı, çarpışmadan sonra geriye kalandır ve sıfıra yakındır. relativeVelocity ise çarpmanın kendi hızını korur. Bu bir hız olduğundan kütlenin etkisi yoktur: 6 m/s hızla yere inen ağır ve hafif yumurtalar aynı 6 değerini verir.

challenge icon

Görev

Kolay

Window.cs dosyasını yaz: her çarpma pencereyi zayıflatır ve pencere 0'da parçalanır.

  1. Pencerenin OnCollisionEnter yönteminde, collision.relativeVelocity.magnitude değerini strength değerinden çıkar.
  2. strength <= 0f olduğunda Destroy(gameObject); çağır.

“Oyna” düğmesine bas, yukarı ok tuşuyla yumuşak toplar, ardından Space tuşuyla sert bir top yuvarla: pencere kırılır. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // Her darbe, çarpma hızını strength değerinden düşer; strength 0 olduğunda pencere parçalanır
}

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

Kendi başına pratik yap: Unity playground