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.
Desafío
FácilAsigna al trampolín y al hielo sus propios valores de rebote y fricción.
- En
Start(), tomaPhysicsMaterial mat = GetComponent<Collider>().material;y establecemat.bounciness = bounce;,mat.dynamicFrictionymat.staticFrictionenfriction. - Establece
mat.bounceCombine = PhysicsMaterialCombine.Maximum;ymat.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
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity