Odbicie i tarcie
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 12 z 63.
Sposób, w jaki collider odbija się i ślizga, zależy od jego PhysicsMaterial (nazwa w Unity 6; w starszych wersjach nazywał się PhysicMaterial). bounciness mieści się w zakresie od 0 (brak odbicia) do 1 (zachowuje całą swoją prędkość). dynamicFriction spowalnia ciało, które się ślizga, a staticFriction określa, z jaką siłą trzeba popchnąć spoczywające ciało, zanim zacznie się ślizgać. Collider bez materiału zachowuje się tak, jakby miał tarcie 0.6 i sprężystość 0. Ta superpiłka przypisuje własnemu colliderowi sprężysty materiał:
void Start()
{
PhysicsMaterial mat = GetComponent<Collider>().material; // własna kopia tego kolidera
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żdy z nich 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ę później na tej liście. Na podłodze bez materiału tryb Average dałby piłce (0.9 + 0) / 2 = 0.45. Tryb Maximum sprawia, że przy każdym odbiciu zachowuje ona 0.9 swojej prędkości, co odpowiada 0.9 x 0.9 = 81% jej wysokości, ponieważ wysokość zależy od 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 każdy collider, który go używa; ma wartość null dla collidera, któremu nigdy go nie przypisano.
Wyzwanie
ŁatwyNadaj edytorowi online powierzchnie. Skrypt Surface znajduje się na niebieskiej trampolinie (bounce 0.8, friction 0.6) i na pasie lodu (bounce 0, friction 0.1). Piłka i skrzynia nie mają własnych materiałów.
- W
Start()ustaw własny materiał tego collidera nabounceifriction(zarówno dynamiczne, jak i statyczne). - Wszystko, co wyląduje na powierzchni, musi odbijać się z pełną wartością
bouncetej powierzchni, a wszystko, co się po niej ślizga, musi mieć własną wartośćfrictionpowierzchni, a nie mieszaninę z wartością 0.6 obiektów bez materiału.
Naciśnij Play, aby obserwować odbijającą się piłkę, a następnie Check: skrzynia również przesuwa się po lodzie.
Spróbuj swoich sił
using UnityEngine;
public class Surface : MonoBehaviour
{
public float bounce = 0f;
public float friction = 0.6f;
void Start()
{
// Przypisz temu koliderowi własny materiał z wartościami bounce i friction
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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 startowa2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur