View
419
Download
4
Category
Preview:
Citation preview
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 AddForcevar 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 Transformtransform.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);
Recommended