Rebote y fricción
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 12 de 63.
La forma en que un colisionador rebota y se desliza depende de su PhysicsMaterial (el nombre en Unity 6; las versiones anteriores lo llamaban PhysicMaterial). bounciness va de 0 (sin rebote) a 1 (conserva toda su velocidad). dynamicFriction ralentiza un cuerpo que se está deslizando, y staticFriction determina con cuánta fuerza hay que empujar 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 le da 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, con bounceCombine para la elasticidad y frictionCombine para la fricción, y cada uno admite uno de cuatro modos: Average (el predeterminado), Minimum, Multiply o Maximum. Cuando los dos colisionadores solicitan modos diferentes, prevalece el que aparece más adelante en esa lista. En un suelo sin material, Average daría a la pelota (0.9 + 0) / 2 = 0.45. Con Maximum conserva 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 su propia copia del material, así que los cambios solo lo afectan a él. .sharedMaterial es el propio recurso de material, compartido por todos los colisionadores que lo usan, y es null en un colisionador al que nunca se le asignó uno.
Desafío
FácilDale superficies al patio de juegos. El script Surface está en el trampolín azul (bounce 0.8, friction 0.6) y en la franja de hielo (bounce 0, friction 0.1). La pelota y la caja no tienen materiales propios.
- En
Start(), establece el material propio de este colisionador conbounceyfriction(tanto dinámico como estático). - Todo lo que caiga sobre una superficie debe rebotar con el
bouncecompleto de la superficie, y todo lo que se deslice sobre ella debe tener elfrictionpropio de la superficie, sin mezclarse con el 0.6 de los objetos sin material.
Pulsa Play para ver cómo rebota la pelota y, después, Check: también desliza la caja por el hielo.
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
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger