Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Assegna al trampolino e al ghiaccio valori di rimbalzo e attrito propri.

  1. In Start(), prendi PhysicsMaterial mat = GetComponent<Collider>().material; e imposta mat.bounciness = bounce;, mat.dynamicFriction e mat.staticFriction su friction.
  2. Imposta mat.bounceCombine = PhysicsMaterialCombine.Maximum; e mat.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

Esercitati da solo: Playground Unity