Physics Material na Unity: Quique, Atrito e Bola que Pula

Unity Physics Material em três cenas: bola que quica até parar, personagem que não gruda na parede e piso de gelo, com Friction, Bounciness e os modos Combine.
Physics Material na Unity: Quique, Atrito e Bola que Pula
Unity Physics Material é o asset que define como a superfície de um collider se comporta no contato: quanto ela escorrega (Friction), quanto ela quica (Bounciness) e como esses valores se combinam quando dois materiais diferentes se encostam (Combine). É ele que transforma uma esfera numa bola de borracha, um chão num rinque de gelo e um personagem que gruda na parede num que escorrega normalmente.
Este post resolve três cenas comuns com valores concretos no Unity 6.3 LTS: a bola que quica até parar, o personagem que não gruda na parede no meio do pulo e o piso de gelo. No caminho, você entende os modos Combine, que são a razão de "mudei o valor e nada aconteceu".
Unity Physics Material: o que controla
Um Physics Material 3D tem cinco campos. Os valores padrão, segundo a página do Physics Material no manual do Unity 6.3:
| Campo | O que faz | Padrão |
|---|---|---|
| Dynamic Friction | Atrito enquanto as superfícies deslizam uma na outra (0 a 1) | 0,6 |
| Static Friction | Atrito para começar a deslizar quando estão paradas (0 a 1) | 0,6 |
| Bounciness | Quanto da energia volta no impacto: 0 não quica, 1 quica sem perder energia | 0 |
| Friction Combine | Como combinar o atrito dos dois colliders | Average |
| Bounce Combine | Como combinar o quique dos dois colliders | Average |
Static e Dynamic Friction separados reproduzem algo do mundo real: é mais difícil começar a empurrar uma caixa do que mantê-la deslizando. Static maior que Dynamic dá essa sensação.
No Unity 6, a classe no código se chama PhysicsMaterial. Tutoriais antigos escrevem PhysicMaterial, sem o "s".
Criar e aplicar um Physics Material
- No painel Project, clique com o botão direito numa pasta (sugestão:
Assets/Fisica/Materiais). - Escolha Create > Physics Material. O manual também indica o caminho pelo menu Assets > Create > Physics Material.
- Dê um nome que diga o comportamento:
Borracha,Gelo,SemAtrito. - Ajuste os valores no Inspector.
- Selecione o objeto, e no componente Collider (Box, Sphere, Capsule, Mesh) arraste o asset para o campo Material.
Detalhes que evitam confusão:
- O material vai no collider, não no Rigidbody nem no Mesh Renderer. O "Material" do Mesh Renderer é o visual, outra coisa.
- Collider sem material usa o padrão do projeto, configurável em Edit > Project Settings > Physics.
- O mesmo asset pode ser usado em vários colliders. Mudar o asset muda todos.
Bounciness e Bounce Combine
Cena 1: a bola que quica até parar.
Crie uma esfera, adicione Rigidbody, solte de uns 5 metros sobre um plano. Sem material, ela cai e para: Bounciness padrão é 0.
Crie o material Borracha:
| Campo | Valor |
|---|---|
| Dynamic Friction | 0,4 |
| Static Friction | 0,4 |
| Bounciness | 0,8 |
| Friction Combine | Average |
| Bounce Combine | Maximum |
Aplique no SphereCollider. A bola quica em arcos cada vez menores e assenta. Por quê:
- Bounciness 0,8 devolve parte da energia a cada impacto, então cada quique é mais baixo que o anterior.
- Bounce Combine Maximum faz valer o maior entre o quique da bola (0,8) e o do chão (0, padrão). Sem isso, em Average, o quique efetivo seria (0,8 + 0) / 2 = 0,4, e a bola pareceria murcha.
- Quando a velocidade do impacto fica abaixo do Bounce Threshold (Project Settings > Physics), a física para de calcular quique e a bola assenta, em vez de tremer com quiques microscópicos.
Valores de referência para começar:
| Objeto | Bounciness | Bounce Combine |
|---|---|---|
| Bola de borracha | 0,75 a 0,85 | Maximum |
| Bola de basquete | 0,6 a 0,7 | Maximum |
| Caixa de madeira | 0 a 0,1 | Average |
| Pedra, metal | 0 | Minimum |
| Super bola de arcade | 0,95 | Maximum |
Evite Bounciness 1 com Maximum: a bola nunca perde energia e, por imprecisões do solver, pode até ganhar altura ao longo do tempo.
Friction estática e dinâmica
Cena 3 primeiro, porque é a mais simples: o piso de gelo.
Crie o material Gelo:
| Campo | Valor |
|---|---|
| Dynamic Friction | 0,02 |
| Static Friction | 0,02 |
| Bounciness | 0 |
| Friction Combine | Minimum |
| Bounce Combine | Average |
Aplique no collider do trecho de chão congelado. Friction Combine Minimum é o segredo: vale o menor atrito entre o gelo e quem está em cima. Sem isso, em Average, uma caixa com atrito 0,6 sobre o gelo teria atrito (0,6 + 0,02) / 2 = 0,31 e quase não escorregaria.
Agora a parte que pega quase todo mundo: caixas escorregam no gelo, mas o seu personagem talvez não. O atrito só age sobre o que a física está movendo. Se o script do personagem atribui linearVelocity a cada passo de física, ele substitui a velocidade antes que o atrito faça qualquer coisa, e o personagem para na hora mesmo no gelo.
Para o personagem sentir o gelo, o script precisa cooperar: no gelo, em vez de trocar a velocidade, ele acelera devagar em direção à velocidade desejada. Uma forma simples é ler o material do chão pelo raycast de ground check (hit.collider.sharedMaterial) e usar uma taxa de aceleração menor quando ele for o Gelo, com Vector3.MoveTowards na velocidade horizontal. O material marca a superfície; o script decide o comportamento.
Sobre a ordem de prioridade dos modos Combine no 3D, que define quem vence quando os dois colliders têm modos diferentes: Maximum, depois Multiply, depois Minimum, depois Average. Se o chão usa Average e a bola usa Maximum, vale Maximum.
Configurar um material é rápido. O que dá trabalho é o personagem respeitar o gelo, quicar no trampolim e não grudar na parede ao mesmo tempo, sem que uma regra quebre a outra. Esse encaixe entre física e script de movimento é parte do que o curso de Unity constrói dentro de um jogo completo, em que cada superfície nova é testada contra o personagem que já existe.
Physics Material 2D
A física 2D tem seu próprio asset: Create > 2D > Physics Material 2D. Ele vai no campo Material dos colliders 2D ou no campo Material do Rigidbody 2D, que aplica a todos os colliders do corpo que não têm material próprio.
Diferenças em relação ao 3D, conforme a referência do PhysicsMaterial2D no Unity 6.3:
- Um único Friction, sem separação entre estático e dinâmico.
- Bounciness, igual ao 3D.
- Friction Combine e Bounce Combine também existem, com cinco modos: Average, Mean (média geométrica), Multiply, Minimum e Maximum.
- A ordem de prioridade é outra: Maximum, Minimum, Multiply, Mean, Average. Repare que no 2D Minimum vem antes de Multiply; no 3D é o contrário.
As três cenas se reproduzem em 2D com os mesmos valores, trocando os dois atritos por um só.
Personagem grudando na parede: a correção
Cena 2: o personagem que gruda na parede no meio do pulo.
O sintoma: o jogador pula em direção a uma parede, segura o direcional contra ela e o personagem fica parado no ar, grudado, até soltar o botão. Acontece com personagem de Rigidbody (3D ou 2D) e confunde muita gente porque parece bug de gravidade.
A causa é atrito. O script empurra o personagem contra a parede, a parede responde com uma força normal, e o atrito, proporcional a essa força, segura o personagem verticalmente. Quanto mais o jogador empurra, mais ele gruda.
A correção é um material sem atrito no personagem. Crie SemAtrito:
| Campo | Valor |
|---|---|
| Dynamic Friction | 0 |
| Static Friction | 0 |
| Bounciness | 0 |
| Friction Combine | Minimum |
| Bounce Combine | Minimum |
Aplique no collider do personagem (no 2D, Friction 0 com Friction Combine Minimum). Com Minimum, vale o zero do personagem, independente do atrito da parede. Ele escorrega e cai normalmente.
Duas consequências para tratar no script:
- O personagem para de frear sozinho no chão. Com atrito zero, se o script usa
AddForce, ele desliza como no gelo. Se o script atribui a velocidade horizontal a cada passo (o padrão para jogo de plataforma), nada muda: a parada vem do código. - Rampas. Sem atrito, um personagem parado numa rampa escorrega para baixo. A correção é no script: quando ele está no chão sem input, zerar a velocidade horizontal, ou desligar a gravidade enquanto está parado na rampa.
O post de movimento de personagem de plataforma 2D mostra como estruturar aceleração e frenagem no código, que é exatamente o que assume o papel do atrito.
Erros comuns
Mudar o valor e nada acontecer. Quase sempre é o Combine. O chão em Average dilui o seu valor pela metade. Confira o modo dos dois colliders e lembre que vale o de maior prioridade.
Material no lugar errado. Arrastar o Physics Material para o Mesh Renderer não funciona. É no campo Material do Collider.
Gelo que não escorrega o jogador. O script sobrescreve a velocidade. O atrito não tem chance de agir. Mude o script, não o material.
Bola que nunca para. Bounciness 1 com Maximum. Baixe para 0,8 a 0,9.
Bola que treme no chão. Bounce Threshold muito baixo no projeto, ou Bounciness alta demais num objeto leve. Confira o valor em Project Settings > Physics.
Usar material 3D num collider 2D. Os campos não aceitam. Physics Material 2D é outro asset.
Editar o material compartilhado em tempo de jogo. Mudar collider.sharedMaterial altera o asset para todos os objetos que o usam (e, no editor, o asset salvo). Para mudar só um objeto, use collider.material, que cria uma cópia.
Próximo passo
Crie os três materiais deste post (Borracha, Gelo, SemAtrito) e guarde numa pasta de física do seu projeto. Monte uma cena com uma bola, uma caixa, um trecho de gelo e uma parede alta, e teste o personagem pulando contra a parede com e sem o SemAtrito. Depois coloque a caixa no gelo com Friction Combine em Average e em Minimum para ver a diferença.
Para a versão 2D completa, com as outras configurações do corpo, o post de Rigidbody2D na Unity passa por Body Type, Gravity Scale e Interpolate. E se você usa Godot também, o guia de física de jogos no Godot mostra o equivalente de lá, o PhysicsMaterial, com friction, bounce e as opções rough e absorbent.
Perguntas frequentes
Como criar um Physics Material na Unity?
No Project, clique com o botão direito e escolha Create > Physics Material (3D) ou Create > 2D > Physics Material 2D. Ajuste os valores no Inspector e arraste o asset para o campo Material do collider. Sem material, o collider usa os valores padrão do projeto.
Por que a bola não para de quicar na Unity?
Com Bounciness 1 e Bounce Combine em Maximum, a bola devolve toda a energia a cada batida e nunca para. Use Bounciness abaixo de 1 (0,6 a 0,85 para uma bola de borracha) e confira o Bounce Combine do chão. Abaixo do Bounce Threshold do projeto, a física para de calcular quique, e a bola assenta.
Como evitar que o personagem grude na parede durante o pulo?
Crie um Physics Material com Friction 0 (Static e Dynamic no 3D) e Friction Combine em Minimum, e aplique no collider do personagem. O atrito com a parede vira zero e ele escorrega. Controle a parada no chão pelo script de movimento, não pelo atrito.
Qual a diferença entre PhysicsMaterial e PhysicsMaterial2D?
O 3D tem Static Friction, Dynamic Friction, Bounciness e os modos Friction Combine e Bounce Combine. O 2D tem um único Friction, Bounciness e, no Unity 6.3, também Friction Combine e Bounce Combine, com um modo extra (Mean) e uma ordem de prioridade diferente da do 3D.


