Rimbalzo e attrito
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 12 di 63.
Il modo in cui un collider rimbalza e scivola dipende dal suo PhysicsMaterial (il nome in Unity 6; nelle versioni precedenti si chiamava PhysicMaterial). bounciness va da 0 (nessun rimbalzo) a 1 (mantiene tutta la sua velocità). dynamicFriction rallenta un corpo che sta scivolando, mentre staticFriction determina quanto bisogna spingere un corpo fermo prima che inizi a scivolare. Un collider senza materiale si comporta come se avesse un attrito pari a 0.6 e una bounciness pari a 0. Questa super palla assegna al proprio collider un materiale elastico:
void Start()
{
PhysicsMaterial mat = GetComponent<Collider>().material; // la copia di questo collider
mat.bounciness = 0.9f;
mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}Un contatto coinvolge due collider, quindi Unity combina i loro valori. Ogni materiale sceglie come combinarli, usando bounceCombine per la bounciness e frictionCombine per l'attrito, e ciascuno può adottare una delle quattro modalità: Average (quella predefinita), Minimum, Multiply o Maximum. Quando i due collider richiedono modalità diverse, prevale quella che compare più avanti nell'elenco. Su un pavimento senza materiale, Average darebbe alla palla (0.9 + 0) / 2 = 0.45. Con Maximum mantiene il 90% della sua velocità a ogni rimbalzo, cioè 0.9 x 0.9 = 81% della sua altezza, poiché l'altezza è proporzionale al quadrato della velocità.
.material assegna a questo collider una copia propria del materiale, quindi le modifiche hanno effetto solo su di esso. .sharedMaterial è la risorsa del materiale stessa, condivisa da tutti i collider che la usano, ed è null su un collider a cui non è mai stato assegnato un materiale.
Sfida
FacileDai al campo da gioco le sue superfici. Lo script Surface è sul Trampolino blu (bounce 0.8, friction 0.6) e sulla striscia di ghiaccio (bounce 0, friction 0.1). La palla e la cassa non hanno materiali propri.
- In
Start(), imposta il materiale del collider stesso subounceefriction(sia dinamico che statico). - Qualunque cosa atterri su una superficie deve rimbalzare con il
bouncecompleto della superficie, e qualunque cosa ci scivoli sopra deve avere lafrictionpropria della superficie, senza mescolarla con lo 0.6 degli oggetti senza materiale.
Premi Play per guardare la palla rimbalzare, poi Check: anche la cassa scivola sul ghiaccio.
Provalo tu
using UnityEngine;
public class Surface : MonoBehaviour
{
public float bounce = 0f;
public float friction = 0.6f;
void Start()
{
// Assegna a questo collider un materiale proprio con bounce e friction
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere