Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Dai 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 su bounce e friction (sia dinamico che statico).
  • Qualunque cosa atterri su una superficie deve rimbalzare con il bounce completo della superficie, e qualunque cosa ci scivoli sopra deve avere la friction propria 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
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay