Menu
CoddyTech

Odbicie i tarcie

Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 12 z 71.

Sposób, w jaki collider odbija się i ślizga, wynika z przypisanego mu PhysicsMaterial (nazwa w Unity 6; w starszych wersjach nazywał się PhysicMaterial). bounciness przyjmuje wartości od 0 (brak odbicia) do 1 (zachowuje całą swoją prędkość). dynamicFriction spowalnia obiekt, który się ślizga, a staticFriction określa, jak mocno trzeba popchnąć spoczywający obiekt, zanim zacznie się ślizgać. Collider bez materiału działa tak, jakby jego tarcie wynosiło 0.6, a sprężystość 0. Ta superpiłka przypisuje własnemu colliderowi sprężysty materiał:

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // własna kopia tego collidera
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

W kontakcie uczestniczą dwa collidery, więc Unity łączy ich wartości. Każdy materiał określa sposób łączenia: bounceCombine dla sprężystości i frictionCombine dla tarcia. Każda z tych właściwości przyjmuje jeden z czterech trybów: Average (domyślny), Minimum, Multiply lub Maximum. Gdy dwa collidery żądają różnych trybów, wygrywa ten, który znajduje się dalej na tej liście. Na podłodze bez materiału tryb Average dałby piłce (0.9 + 0) / 2 = 0.45. W trybie Maximum zachowuje ona 0.9 swojej prędkości przy każdym odbiciu, co odpowiada 0.9 x 0.9 = 81% jej wysokości, ponieważ wysokość jest proporcjonalna do kwadratu prędkości.

.material zwraca własną kopię materiału tego collidera, więc zmiany dotyczą tylko jego. .sharedMaterial to sam zasób materiału, współdzielony przez wszystkie używające go collidery; dla collidera, któremu nigdy go nie przypisano, ma wartość null.

challenge icon

Wyzwanie

Łatwy

Nadaj trampolinie i lodowi własne wartości sprężystości i tarcia.

  1. W Start() pobierz PhysicsMaterial mat = GetComponent<Collider>().material; i ustaw mat.bounciness = bounce;, mat.dynamicFriction oraz mat.staticFriction na friction.
  2. Ustaw mat.bounceCombine = PhysicsMaterialCombine.Maximum; i mat.frictionCombine = PhysicsMaterialCombine.Minimum;, aby wygrywały własne wartości powierzchni.

Naciśnij „Graj”: piłka wysoko odbija się od trampoliny. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    void Start()
    {
        // Przypisz temu colliderowi własny materiał z wartościami bounce i friction
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity