Menu
CoddyTech

Rebote y fricción

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 12 de 71.

La forma en que un colisionador rebota y se desliza depende de su PhysicsMaterial (el nombre en Unity 6; en versiones anteriores se llamaba PhysicMaterial). bounciness va de 0 (sin rebote) a 1 (conserva toda su velocidad). dynamicFriction ralentiza un cuerpo que se está deslizando, y staticFriction determina cuánta fuerza hay que aplicar a un cuerpo en reposo antes de que empiece a deslizarse. Un colisionador sin material actúa como si tuviera una fricción de 0.6 y una elasticidad de 0. Esta superbola asigna un material elástico a su propio colisionador:

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // la copia propia de este collider
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

En un contacto hay dos colisionadores, así que Unity combina sus dos valores. Cada material determina cómo hacerlo: bounceCombine para la elasticidad y frictionCombine para la fricción. Cada uno acepta uno de cuatro modos: Average (el predeterminado), Minimum, Multiply o Maximum. Si los dos colisionadores solicitan modos distintos, prevalece el que aparece más adelante en esa lista. En un suelo sin material, Average le daría a la pelota (0.9 + 0) / 2 = 0.45. Con Maximum, conserva el 0.9 de su velocidad en cada rebote, lo que equivale al 0.9 x 0.9 = 81 % de su altura, ya que la altura depende del cuadrado de la velocidad.

.material le da a este colisionador una copia propia de su material, así que los cambios solo le afectan a él. .sharedMaterial es el recurso de material en sí, compartido por todos los colisionadores que lo usan, y es null en un colisionador al que nunca se le asignó uno.

challenge icon

Desafío

Fácil

Asigna al trampolín y al hielo sus propios valores de rebote y fricción.

  1. En Start(), toma PhysicsMaterial mat = GetComponent<Collider>().material; y establece mat.bounciness = bounce;, mat.dynamicFriction y mat.staticFriction en friction.
  2. Establece mat.bounceCombine = PhysicsMaterialCombine.Maximum; y mat.frictionCombine = PhysicsMaterialCombine.Minimum;, para que prevalezcan los valores propios de la superficie.

Pulsa «Jugar»: la pelota rebota alto en el trampolín. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

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

    void Start()
    {
        // Asigna a este collider su propio material con bounce y friction
    }
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity