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.
Wyzwanie
ŁatwyNadaj trampolinie i lodowi własne wartości sprężystości i tarcia.
- W
Start()pobierzPhysicsMaterial mat = GetComponent<Collider>().material;i ustawmat.bounciness = bounce;,mat.dynamicFrictionorazmat.staticFrictionnafriction. - Ustaw
mat.bounceCombine = PhysicsMaterialCombine.Maximum;imat.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
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwiPoćwicz samodzielnie: Edytor online Unity