Menu
CoddyTech

Sekme ve Sürtünme

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

Bir çarpıştırıcının nasıl sektiği ve kaydığı, PhysicsMaterial değerine bağlıdır (Unity 6'daki adı; eski sürümlerde PhysicMaterial olarak adlandırılıyordu). bounciness 0 (sekme yok) ile 1 (hızının tamamını korur) arasında değişir. dynamicFriction kayan bir cismi yavaşlatır ve staticFriction, duran bir cismin kaymaya başlamadan önce ne kadar güçlü itilmesi gerektiğini belirler. Malzemesi olmayan bir çarpıştırıcının sürtünmesi 0.6, sekme katsayısı ise 0 olarak kabul edilir. Bu süper top, kendi çarpıştırıcısına zıplayan bir malzeme atar:

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // bu collider'ın kendi kopyası
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

Temas noktasında iki çarpıştırıcı bulunur, bu nedenle Unity bunların değerlerini birleştirir. Her malzeme bunun nasıl yapılacağını seçer: sekme katsayısı için bounceCombine, sürtünme için frictionCombine kullanılır ve her biri dört moddan birini alır: Average (varsayılan), Minimum, Multiply veya Maximum. İki çarpıştırıcı farklı modlar istediğinde, listede daha sonra gelen mod kazanır. Malzemesi olmayan bir zeminde Average, top için (0.9 + 0) / 2 = 0.45 sonucunu verir. Maximum ile top her sekişte hızının 0.9'unu korur; bu da yüksekliğinin 0.9 x 0.9 = %81'i demektir, çünkü yükseklik hızın karesiyle orantılıdır.

.material, bu çarpıştırıcıya malzemesinin kendi kopyasını verir; dolayısıyla değişiklikler yalnızca onu etkiler. .sharedMaterial ise malzeme varlığının kendisidir ve onu kullanan tüm çarpıştırıcılar tarafından paylaşılır; hiç malzeme atanmamış bir çarpıştırıcıda değeri null olur.

challenge icon

Görev

Kolay

Trambolin ve buz için ayrı zıplama ve sürtünme değerleri belirle.

  1. Start() içinde PhysicsMaterial mat = GetComponent<Collider>().material; satırını al ve mat.bounciness = bounce;, mat.dynamicFriction ve mat.staticFriction değerlerini friction olarak ayarla.
  2. mat.bounceCombine = PhysicsMaterialCombine.Maximum; ve mat.frictionCombine = PhysicsMaterialCombine.Minimum; olarak ayarla; böylece yüzeyin kendi değerleri geçerli olur.

“Oyna” düğmesine bas: top trambolinden yükseğe seker. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Surface : MonoBehaviour
{
    public float bounce = 0f;
    public float friction = 0.6f;

    void Start()
    {
        // Bu collider'a bounce ve friction değerlerini içeren kendine ait bir materyal ata
    }
}

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

Kendi başına pratik yap: Unity playground