Rimbalzo e attrito
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 12 di 71.
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 con quanta forza 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 un materiale elastico al proprio collider:
void Start()
{
PhysicsMaterial mat = GetComponent<Collider>().material; // la copia propria 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; per ciascuno si può scegliere una delle quattro modalità: Average (quella predefinita), Minimum, Multiply o Maximum. Se 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, a ogni rimbalzo conserva 0.9 della sua velocità, che corrisponde al 0.9 x 0.9 = 81% della sua altezza, perché l'altezza è proporzionale al quadrato della velocità.
.material assegna a questo collider una copia personale del materiale, quindi le modifiche influiscono solo su di esso. .sharedMaterial è la risorsa del materiale stessa, condivisa da tutti i collider che la usano, e vale null per un collider a cui non ne è mai stato assegnato uno.
Sfida
FacileAssegna al trampolino e al ghiaccio valori di rimbalzo e attrito propri.
- In
Start(), prendiPhysicsMaterial mat = GetComponent<Collider>().material;e impostamat.bounciness = bounce;,mat.dynamicFrictionemat.staticFrictionsufriction. - Imposta
mat.bounceCombine = PhysicsMaterialCombine.Maximum;emat.frictionCombine = PhysicsMaterialCombine.Minimum;, in modo che prevalgano i valori propri della superficie.
Premi «Gioca»: la palla rimbalza in alto sul trampolino. Poi premi «Verifica».
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
}
}
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 rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity