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.
Desafio
FácilDê à cama elástica e ao gelo seus próprios valores de quique e atrito.
- Em
Start(), obtenhaPhysicsMaterial mat = GetComponent<Collider>().material;e definamat.bounciness = bounce;,mat.dynamicFrictionemat.staticFrictioncomofriction. - Defina
mat.bounceCombine = PhysicsMaterialCombine.Maximum;emat.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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para ColetarPratique por conta própria: Playground de Unity