Projetos RAD : Unity 3D 
Colisões Parte 1 
Augusto Bülow
Unity 
• Colisões = essencial em games 
– Comportamento de acordo com a cena 
• Colisão chão, paredes 
– Comportamento com outros objetos 
• Colisão com outros objetos 
– Identificar área atual 
– Tiros, bônus, etc.
Unity 
• Objetos com colisão: 
– Componente Collider 
– Adicionado por default 
• Diferentes tipos de Collider 
– Mais adequado a forma 
– Maior / menor performance 
• Adicionável por: 
– Component->Physics
Unity 
• Collider: Box 
– Colisão básica, boa 
performance 
– Aceita dimensões 
diferentes em X,Y,Z 
– Utilização geral: 
• Paredes, caixas, 
objetos, personagens, 
etc.
Unity 
• Collider: Sphere 
– Colisão básica, maior 
performance 
– Dimensão única: Raio 
– Utilização geral: 
• Objetos esféricos, 
personagens, etc.
Unity 
• Collider: Capsule 
– Cilindro com meia 
esfera em cada ponta 
– Maior processamento 
– Duas Dimensões: 
• Altura e Raio 
– Configuração 
adicional: orientação 
– Utilização geral: 
• Personagens e objetos
Unity 
• Collider: Mesh 
– Reproduz a malha real do 
objeto 
– Ultra processamento 
– Restrições 
• Meshs com 255 faces 
máximo 
• Mesh collider não colide 
com outro mesh collider* 
– Uso quando necessário 
– Geral outros colliders são 
mais adequados
Unity 
• Collider: Wheel 
– Roda: especial para 
veículos com física 
– Parâmetros para 
funcionamento como 
motor (físico) 
– Distancia básica por 
raio 
– Uso exclusivo: 
veículos com física
Unity 
• Collider: Raycast 
– Raio simples para 
determinar altura 
– Uso específico para 
alguns veículos / objs 
– Dispara um raio do 
centro para baixo 
– Checa colisões: 
• altura solo basicamente
Unity 
• Colisões em geral usando primitivas 
– Box, Sphere, Capsule 
• Colisão Mesh : 
– apenas em situações específicas 
• Wheel / Raycast 
– Veículos com funcionamento físico
Unity 
• Possível criar Collider composto 
– Criar objetos com hierarquia 
– Criar Collider com primitivas para cada parte (child) 
• Funciona como Collider único (ligados por hierarquia) 
• Simulação de Mesh e objetos complexos
Unity 
• Collider = forma para colisão 
• Todos objetos que se deseja perceber a colisão precisam 
ter um Collider atachado 
• Objetos apenas com collider = Static Collider 
– Estáticos, não se espera grandes movimentos 
– Não se detectam grandes colisões em geral 
• Componentes adicionais para colisões mais completas 
– Simulação física = RigidBody 
– Personagens = Character Controlle
Unity 
• RigidBody – ativa física para um objeto 
– Controle do objeto passa a ser gerido pela engine 
física 
– Reage automaticamente com outros objetos 
– Possui massa específica (peso) 
– Possui fricção, elasticidade (Physics Material) 
– Funcionamento autônomo – baseado em colisões 
– Possível mover por propriedades transform: 
• Quebra do realismo físico (possível) 
– Movimento com forças físicas 
• Comandos específicos
Unity 
• RigidBody Test: 
– Criar cena com pilar 
básico (StaticCollider) e 
cubos com componente 
RigidBox (físicos) 
• Adicionando RigidBody 
– Component->Physics-> 
• RigidBody
Unity 
• Player (Físico) códigos específicos 
• Interações com física: 
function FixedUpdate() 
• Funções força para RigidBody 
– AddForce(x,y,z) 
• Adiciona forças ao corpo, baseadas nas coordenadas 
mundiais 
– AddRelativeForce(x,y,z) 
• Adiciona forças ao corpo, baseadas nas coordenadas 
atuais do objeto (suas rotações)
Unity 
• Código básico teste AddForce 
var velocidade = 15; 
var forca : Vector3; 
function FixedUpdate () { 
//CAPTURA INPUT BASICO 
forca.x = Input.GetAxis("Horizontal"); 
forca.y = 0; 
forca.z = Input.GetAxis("Vertical"); 
//Multiplicamos vetor pela velocidade desejada 
forca *= velocidade; 
rigidbody.AddForce(forca); 
}
Unity 
• AddForce = sem muita precisão (direta) 
• Comportamento físico realístico faz rotar com 
colisões automaticamente 
• Uso para forças realísticas sobre objetos 
físicos: 
– jogar um objeto em alguma direção 
• Resultado: depende das colisões encontradas 
• AddForce: 
– forças em relação aos eixos mundiais
Unity 
• AddRelativeForce(x,y,z) 
– Forças adicionadas em relação aos ângulos atuais 
do objeto (sua orientação) 
– Funcionamento semelhante (física realística) 
– Resultado completamente diferente 
• Teste: substituir código: 
//rigidbody.AddForce(forca); 
rigidbody.AddRelativeForce(forca);
Unity 
• MovePosition(x,y,z) 
– Move objeto físico para nova posição (tenta mover) 
– Posição mundial: 
= utilizar posição atual + movimento desejado 
- Neste caso utilizar deltaTime para movimento 
compatível / escalado pelo tempo 
- Multiplicar movimento por Time.deltaTime 
- AddForce = não se usa deltaTime 
- Já incorporado pela engine física
Unity 
• Exemplo MovePosition 
function FixedUpdate () { 
forca.x = Input.GetAxis("Horizontal"); 
forca.y = 0; 
forca.z = Input.GetAxis("Vertical"); 
forca *= velocidade; 
forca *= Time.deltaTime; 
forca += rigidbody.position; 
rigidbody.MovePosition(forca); 
}
Unity 
• Transformar vetor de forças em relação a uma 
orientação / ângulo 
• Função específica da classe Transform 
transform.TransformDirection(x,y,z) 
• Converte vetor de forças X,Y,Z para equivalente em 
relação a orientação do objeto 
• Adicionar ao código a linha: 
forca = transform.TransformDirection(forca);

Aula5 colisao1

  • 1.
    Projetos RAD :Unity 3D Colisões Parte 1 Augusto Bülow
  • 2.
    Unity • Colisões= essencial em games – Comportamento de acordo com a cena • Colisão chão, paredes – Comportamento com outros objetos • Colisão com outros objetos – Identificar área atual – Tiros, bônus, etc.
  • 3.
    Unity • Objetoscom colisão: – Componente Collider – Adicionado por default • Diferentes tipos de Collider – Mais adequado a forma – Maior / menor performance • Adicionável por: – Component->Physics
  • 4.
    Unity • Collider:Box – Colisão básica, boa performance – Aceita dimensões diferentes em X,Y,Z – Utilização geral: • Paredes, caixas, objetos, personagens, etc.
  • 5.
    Unity • Collider:Sphere – Colisão básica, maior performance – Dimensão única: Raio – Utilização geral: • Objetos esféricos, personagens, etc.
  • 6.
    Unity • Collider:Capsule – Cilindro com meia esfera em cada ponta – Maior processamento – Duas Dimensões: • Altura e Raio – Configuração adicional: orientação – Utilização geral: • Personagens e objetos
  • 7.
    Unity • Collider:Mesh – Reproduz a malha real do objeto – Ultra processamento – Restrições • Meshs com 255 faces máximo • Mesh collider não colide com outro mesh collider* – Uso quando necessário – Geral outros colliders são mais adequados
  • 8.
    Unity • Collider:Wheel – Roda: especial para veículos com física – Parâmetros para funcionamento como motor (físico) – Distancia básica por raio – Uso exclusivo: veículos com física
  • 9.
    Unity • Collider:Raycast – Raio simples para determinar altura – Uso específico para alguns veículos / objs – Dispara um raio do centro para baixo – Checa colisões: • altura solo basicamente
  • 10.
    Unity • Colisõesem geral usando primitivas – Box, Sphere, Capsule • Colisão Mesh : – apenas em situações específicas • Wheel / Raycast – Veículos com funcionamento físico
  • 11.
    Unity • Possívelcriar Collider composto – Criar objetos com hierarquia – Criar Collider com primitivas para cada parte (child) • Funciona como Collider único (ligados por hierarquia) • Simulação de Mesh e objetos complexos
  • 12.
    Unity • Collider= forma para colisão • Todos objetos que se deseja perceber a colisão precisam ter um Collider atachado • Objetos apenas com collider = Static Collider – Estáticos, não se espera grandes movimentos – Não se detectam grandes colisões em geral • Componentes adicionais para colisões mais completas – Simulação física = RigidBody – Personagens = Character Controlle
  • 13.
    Unity • RigidBody– ativa física para um objeto – Controle do objeto passa a ser gerido pela engine física – Reage automaticamente com outros objetos – Possui massa específica (peso) – Possui fricção, elasticidade (Physics Material) – Funcionamento autônomo – baseado em colisões – Possível mover por propriedades transform: • Quebra do realismo físico (possível) – Movimento com forças físicas • Comandos específicos
  • 14.
    Unity • RigidBodyTest: – Criar cena com pilar básico (StaticCollider) e cubos com componente RigidBox (físicos) • Adicionando RigidBody – Component->Physics-> • RigidBody
  • 15.
    Unity • Player(Físico) códigos específicos • Interações com física: function FixedUpdate() • Funções força para RigidBody – AddForce(x,y,z) • Adiciona forças ao corpo, baseadas nas coordenadas mundiais – AddRelativeForce(x,y,z) • Adiciona forças ao corpo, baseadas nas coordenadas atuais do objeto (suas rotações)
  • 16.
    Unity • Códigobásico teste AddForce var velocidade = 15; var forca : Vector3; function FixedUpdate () { //CAPTURA INPUT BASICO forca.x = Input.GetAxis("Horizontal"); forca.y = 0; forca.z = Input.GetAxis("Vertical"); //Multiplicamos vetor pela velocidade desejada forca *= velocidade; rigidbody.AddForce(forca); }
  • 17.
    Unity • AddForce= sem muita precisão (direta) • Comportamento físico realístico faz rotar com colisões automaticamente • Uso para forças realísticas sobre objetos físicos: – jogar um objeto em alguma direção • Resultado: depende das colisões encontradas • AddForce: – forças em relação aos eixos mundiais
  • 18.
    Unity • AddRelativeForce(x,y,z) – Forças adicionadas em relação aos ângulos atuais do objeto (sua orientação) – Funcionamento semelhante (física realística) – Resultado completamente diferente • Teste: substituir código: //rigidbody.AddForce(forca); rigidbody.AddRelativeForce(forca);
  • 19.
    Unity • MovePosition(x,y,z) – Move objeto físico para nova posição (tenta mover) – Posição mundial: = utilizar posição atual + movimento desejado - Neste caso utilizar deltaTime para movimento compatível / escalado pelo tempo - Multiplicar movimento por Time.deltaTime - AddForce = não se usa deltaTime - Já incorporado pela engine física
  • 20.
    Unity • ExemploMovePosition function FixedUpdate () { forca.x = Input.GetAxis("Horizontal"); forca.y = 0; forca.z = Input.GetAxis("Vertical"); forca *= velocidade; forca *= Time.deltaTime; forca += rigidbody.position; rigidbody.MovePosition(forca); }
  • 21.
    Unity • Transformarvetor de forças em relação a uma orientação / ângulo • Função específica da classe Transform transform.TransformDirection(x,y,z) • Converte vetor de forças X,Y,Z para equivalente em relação a orientação do objeto • Adicionar ao código a linha: forca = transform.TransformDirection(forca);