Menu
CoddyTech

Quique e atrito

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 12 de 71.

Como um colisor quica e desliza depende do PhysicsMaterial (nome usado no Unity 6; as versões mais antigas o chamavam de PhysicMaterial). bounciness varia de 0 (sem quique) a 1 (mantém toda a sua velocidade). dynamicFriction desacelera um corpo que está deslizando, e staticFriction determina com que força é preciso empurrar um corpo em repouso antes que ele comece a deslizar. Um colisor sem material age como se tivesse atrito 0.6 e elasticidade 0. Esta superbola dá ao próprio colisor um material elástico:

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // a cópia deste próprio collider
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

Um contato envolve dois colisores, então o Unity combina os valores dos dois. Cada material escolhe como fazer isso, com bounceCombine para a elasticidade e frictionCombine para o atrito, e cada um usa um de quatro modos: Average (o padrão), Minimum, Multiply ou Maximum. Quando os dois colisores solicitam modos diferentes, prevalece o que aparece mais tarde nessa lista. Em um piso sem material, Average daria à bola (0.9 + 0) / 2 = 0.45. Com Maximum, ela mantém 0.9 da velocidade a cada quique, o que corresponde a 0.9 x 0.9 = 81% da altura, já que a altura varia com o quadrado da velocidade.

.material dá a esse colisor uma cópia própria do material, então as alterações afetam somente ele. .sharedMaterial é o próprio recurso de material, compartilhado por todos os colisores que o utilizam, e seu valor é null em um colisor ao qual nunca foi atribuído um material.

challenge icon

Desafio

Fácil

Dê à cama elástica e ao gelo seus próprios valores de quique e atrito.

  1. Em Start(), obtenha PhysicsMaterial mat = GetComponent<Collider>().material; e defina mat.bounciness = bounce;, mat.dynamicFriction e mat.staticFriction como friction.
  2. Defina mat.bounceCombine = PhysicsMaterialCombine.Maximum; e mat.frictionCombine = PhysicsMaterialCombine.Minimum;, para que os valores próprios da superfície prevaleçam.

Pressione “Jogar”: a bola quica alto na cama elástica. Em seguida, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class Surface : MonoBehaviour
{
    public float bounce = 0f;
    public float friction = 0.6f;

    void Start()
    {
        // Dê a este collider seu próprio material com bounce e friction
    }
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity