Voltar para o Blog
Quest Log

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

Bola colorida quicando em arcos cada vez menores sobre um piso, ao lado de um trecho de chão de gelo azulado

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.

Ferramenta:Unity

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:

CampoO que fazPadrão
Dynamic FrictionAtrito enquanto as superfícies deslizam uma na outra (0 a 1)0,6
Static FrictionAtrito para começar a deslizar quando estão paradas (0 a 1)0,6
BouncinessQuanto da energia volta no impacto: 0 não quica, 1 quica sem perder energia0
Friction CombineComo combinar o atrito dos dois collidersAverage
Bounce CombineComo combinar o quique dos dois collidersAverage

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

  1. No painel Project, clique com o botão direito numa pasta (sugestão: Assets/Fisica/Materiais).
  2. Escolha Create > Physics Material. O manual também indica o caminho pelo menu Assets > Create > Physics Material.
  3. Dê um nome que diga o comportamento: Borracha, Gelo, SemAtrito.
  4. Ajuste os valores no Inspector.
  5. 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:

CampoValor
Dynamic Friction0,4
Static Friction0,4
Bounciness0,8
Friction CombineAverage
Bounce CombineMaximum

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:

ObjetoBouncinessBounce Combine
Bola de borracha0,75 a 0,85Maximum
Bola de basquete0,6 a 0,7Maximum
Caixa de madeira0 a 0,1Average
Pedra, metal0Minimum
Super bola de arcade0,95Maximum

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:

CampoValor
Dynamic Friction0,02
Static Friction0,02
Bounciness0
Friction CombineMinimum
Bounce CombineAverage

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.

Curso de Unity
Quer fazer seu primeiro jogo na Unity?

No curso de Unity 6 da CursoGame.Dev você vai do zero ao primeiro jogo, com um desafio prático em cada level e suporte individual no WhatsApp quando travar.

Conhecer o curso de Unity
Suporte no WhatsAppAcesso vitalícioGarantia de 7 dias

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:

CampoValor
Dynamic Friction0
Static Friction0
Bounciness0
Friction CombineMinimum
Bounce CombineMinimum

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:

  1. 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.
  2. 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.