SlideShare uma empresa Scribd logo
Tópicos Especiais I:
Colisão
1º Semestre 2010 > PUCPR > Pós Jogos
Bruno C. de Paula
Resumo
 Vamos conhecer as funcionalidades de
colisão que o Unity 3D implementa;
 Também discutiremos diversos scripts que
lidam com a colisão;
 Por fim, vamos tratar da técnica de ray
casting;
 Lembre-se: o tratamento da colisão nem
sempre é necessário. Deixe a
responsabilidade para a física quando puder!
Exemplo Arkanoid.
Colisão
 Interação física entre objetos do jogo;
 Rede invisível que está ao redor do objeto;
 Podemos trabalhar com a colisão
imediatamente quando ocorre;
 Pode-se prever a colisão usando a técnica de
Ray Casting;
312/09/13
Problema do frame miss
 O que acontece quando a bala é rápida
demais?
412/09/13
Solução com ray casting
512/09/13
Tipos de colisores
 Cada um tem uma utilidade diferente;
 Component > Physics
612/09/13
Tipos de componentes de colisão
 Box: caixas, objetos, personagens;
 Sphere: objetos esféricos, personagens;
 Capsule: personagens do jogador;
 Mesh: malha do objeto, mais pesado
computacionalmente;
 Wheel: roda, uso com veículos;
 Raycast: dispara raio de colisão, uso com
veículos;
 Composto: união entre diversos colisores;
 Character Controller: componente de
colisão para personagem do jogador;
712/09/13
Static Collider X Rigidbody
 Static Collider é para objetos cuja física e
colisão é menos necessária;
 Rigidbody é para objetos com física;
812/09/13
Rigidbody
 Tem massa, resistência do ar,
gravidade, elasticidade baseada no
material, etc;
 É possível movê-lo via scripting, mas
deve ser evitado;
 Usar evento FixedUpdate, chamado em um
tempo fixo;
912/09/13
Script
Adicionando uma força a um objeto
AddForce – eixo mundo
1012/09/13
var vel = 10;
function FixedUpdate () {
var f : Vector3;
// X vai de -1 a 1
f.x = Input.GetAxis("Horizontal");
f.y = 0;
f.z = 0;
// Aplica uma velocidade
f = f * vel;
// Força é aplicada no eixo X
rigidbody.AddForce(f);
}
Script
Adicionando uma força a um objeto
AddRelativeForce – eixo local
1112/09/13
var vel = 10;
function FixedUpdate () {
var f : Vector3;
// X vai de -1 a 1
f.x = Input.GetAxis("Horizontal");
f.y = 0;
f.z = 0;
// Aplica uma velocidade
f = f * vel;
// Força é aplicada no eixo X
rigidbody.AddRelativeForce(f);
}
Character Controller
 Não é fisicamente realista (isto pode ser
bom!)
 Height: altura;
 Radius: raio;
 Slope Limit: limite de subida em rampas;
 Skin Width: quanto sobe em degraus;
 Min Move Distance: controla jitter;
 Center: posição;
 O FPS Walker já aplica o Character
Controller.
1212/09/13
Script
Movimento a partir do teclado
1312/09/13
var vel = 10;
function Update () {
var f : Vector3;
f.x = Input.GetAxis("Horizontal");
f.y = 0;
f.z = Input.GetAxis("Vertical");
f = f * vel;
f = f * Time.deltaTime;
// GetComponent acessa um componente do objeto
var controller = GetComponent(CharacterController);
controller.Move(f);
}
Eventos de Colisão
 OnCollisionEnter: chama quando inicia
uma colisão;
 OnCollisionStay: chamado uma vez por
frame enquanto está se chocando no corpo;
 OnCollisionExit: chamado quando a
colisão é finalizada;
 OnControllerColliderHit: colisão com
character controller;
1412/09/13
Script
Obtém o objeto com o qual colidiu
function OnCollisionEnter(objetoColidido : Collision) {
print("Colidiu com: "+
objetoColidido.gameObject.name);
}
Script
Destrói tudo que toca
function OnControllerColliderHit(obj :
ControllerColliderHit) {
Destroy(obj.gameObject);
}
Script
Enviar uma mensagem
function OnControllerColliderHit(obj :
ControllerColliderHit) {
col.gameObject.SendMessage("Destruir");
}
 Para que a mensagem enviada seja tratada
pelo objeto colido, este deve possuir uma
função com o mesmo nome da mensagem;
Script
Modifica propriedades de um objeto diferente
 GameObject.Find procura um objeto a
partir de seu nome;
function OnControllerColliderHit(obj : ControllerColliderHit) {
// Encontra o GameObject com o nome indicado
txt = GameObject.Find("txt");
// Escreve o nome na tela
txt.guiText.text += obj.gameObject.name;
}
Script
Só modifica objeto marcado por tag
function OnControllerColliderHit(obj : ControllerColliderHit)
{
if(obj.gameObject.tag=="bloco")
{
// Encontra o GameObject com o nome indicado
txt = GameObject.Find("txt");
// Escreve o nome do obj na tela
txt.guiText.text=obj.gameObject.name;
}
}
 Cada objeto pode ser associado a uma
tag de identificação;
Triggers
Gatilhos
 Triggers são ignorados pelo engine de
física;
 Úteis para o disparo de eventos:
Cutscenes;
Abertura de portas;
Passagem de mensagem em tutoriais;
Itens de energia;
 Triggers agem como interruptores;
Eventos de trigger
 OnTriggerEnter: chamado
imediatamente quando o colisor entra no
trigger;
 OnTriggerStay: mensagem mandada ao
trigger e aos seus colisores enquanto
estiver colidindo;
 OnTriggerExit: chamado quando o colisor
sai do trigger.
Script
Transporta um objeto à frente após
passar pelo Trigger
function OnTriggerEnter(col : Collider)
{
//Move o objeto no eixo z (andar para frente)
col.transform.Translate(0, 0, 10);
}
Raycast
 Colisão preditiva;
 Útil em:
Projéteis rápidos;
Disparo de colisão e triggers quando o
personagem deve estar olhando
para o trigger;
 Função Physics.Raycast(posição, direção,
distância);
Script
Verifica se há objeto à frente
function Update () {
var hit : RaycastHit;
// Olha 10 metros à frente
if (Physics.Raycast (transform.position,
transform.forward, hit,10))
{
print ("Tem alguma coisa na minha frente");
// Desenha uma linha para representar o raio
Debug.DrawLine (transform.position, hit.point);
} else {
print("Sem nada no caminho");
}
Ignorando a colisão
 Necessário quando se cria tiros e
projéteis;
 Função Physics.IgnoreCollision;
Script
Criando projétil e ignorando a colisão
var projectile : Rigidbody;
var speed = 20;
function Update()
{
if( Input.GetButtonDown( "Fire1" ) )
{
var instantiatedProjectile : Rigidbody = Instantiate(
projectile, transform.position,
transform.rotation );
instantiatedProjectile.velocity =
transform.TransformDirection( Vector3( 0, 0, speed ) );
Physics.IgnoreCollision( instantiatedProjectile. collider,
transform.root.collider );
}
}
Para saber mais
 Capítulo do livro “Unit Game Development
Essentials”:
http://www.packtpub.
com/article/unity-game-development-interactio
 Fonte de algumas figuras desta
apresentação!
2712/09/13

Mais conteúdo relacionado

Destaque

Primeiros Socorros
Primeiros SocorrosPrimeiros Socorros
Primeiros Socorros
prevencaonline
 
Aula 2 causas das lesões
Aula 2   causas das lesõesAula 2   causas das lesões
Aula 2 causas das lesões
Daniela Lima
 
Primeiros socorros (PRS 71) - Hemorragia
Primeiros socorros (PRS 71) - HemorragiaPrimeiros socorros (PRS 71) - Hemorragia
Primeiros socorros (PRS 71) - Hemorragia
Lucas Damasceno
 
Avaliação Inicial tático
Avaliação Inicial táticoAvaliação Inicial tático
Avaliação Inicial tático
siatego
 
Noções básicas de cinemática
Noções básicas de cinemáticaNoções básicas de cinemática
Noções básicas de cinemática
Angélica Brasil
 
Primeiros socorros
Primeiros socorrosPrimeiros socorros
Primeiros socorros
Lucas Silva
 
Primeiros socorros Profª Enfª Tarcila Amorim
Primeiros socorros Profª Enfª Tarcila Amorim Primeiros socorros Profª Enfª Tarcila Amorim
Primeiros socorros Profª Enfª Tarcila Amorim
Hitalo Vieira
 
Hemorragia
HemorragiaHemorragia
Hemorragia
marceloteacher
 
Trauma, colisão e quedas
Trauma, colisão e quedasTrauma, colisão e quedas
Trauma, colisão e quedas
bodywinner
 
Hemorragias
HemorragiasHemorragias
Hemorragias
Stefanny Corrêa
 
Bombeiro civil primeiros socorros
Bombeiro civil primeiros socorrosBombeiro civil primeiros socorros
Bombeiro civil primeiros socorros
marceloteacher
 
3ª aula atendimento inicial no trauma
3ª aula   atendimento inicial no trauma3ª aula   atendimento inicial no trauma
3ª aula atendimento inicial no trauma
Prof Silvio Rosa
 
Aula sobre Hemorragias
Aula sobre HemorragiasAula sobre Hemorragias
Aula sobre Hemorragias
Enf. Eloilson Carneiro
 

Destaque (13)

Primeiros Socorros
Primeiros SocorrosPrimeiros Socorros
Primeiros Socorros
 
Aula 2 causas das lesões
Aula 2   causas das lesõesAula 2   causas das lesões
Aula 2 causas das lesões
 
Primeiros socorros (PRS 71) - Hemorragia
Primeiros socorros (PRS 71) - HemorragiaPrimeiros socorros (PRS 71) - Hemorragia
Primeiros socorros (PRS 71) - Hemorragia
 
Avaliação Inicial tático
Avaliação Inicial táticoAvaliação Inicial tático
Avaliação Inicial tático
 
Noções básicas de cinemática
Noções básicas de cinemáticaNoções básicas de cinemática
Noções básicas de cinemática
 
Primeiros socorros
Primeiros socorrosPrimeiros socorros
Primeiros socorros
 
Primeiros socorros Profª Enfª Tarcila Amorim
Primeiros socorros Profª Enfª Tarcila Amorim Primeiros socorros Profª Enfª Tarcila Amorim
Primeiros socorros Profª Enfª Tarcila Amorim
 
Hemorragia
HemorragiaHemorragia
Hemorragia
 
Trauma, colisão e quedas
Trauma, colisão e quedasTrauma, colisão e quedas
Trauma, colisão e quedas
 
Hemorragias
HemorragiasHemorragias
Hemorragias
 
Bombeiro civil primeiros socorros
Bombeiro civil primeiros socorrosBombeiro civil primeiros socorros
Bombeiro civil primeiros socorros
 
3ª aula atendimento inicial no trauma
3ª aula   atendimento inicial no trauma3ª aula   atendimento inicial no trauma
3ª aula atendimento inicial no trauma
 
Aula sobre Hemorragias
Aula sobre HemorragiasAula sobre Hemorragias
Aula sobre Hemorragias
 

Semelhante a 06 colisao final

Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
jonathanblacknight
 
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island StudiosTutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Victor Bruno Alexand Rosetti de Quiroz
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
Alberto Souza
 
Aula disparos
Aula disparosAula disparos
Aula disparos
Marcos Batista
 
Aula disparos
Aula disparosAula disparos
Aula disparos
Marcos Batista
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
Odair Bonin Borges
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
André Espeiorin
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
Willian Molinari
 
Power mock
Power mockPower mock
Power mock
Eder Nogueira
 
Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
Glaucio Scheibel
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
André Espeiorin
 
Robocode
RobocodeRobocode

Semelhante a 06 colisao final (12)

Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island StudiosTutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
Aula disparos
Aula disparosAula disparos
Aula disparos
 
Aula disparos
Aula disparosAula disparos
Aula disparos
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
 
Power mock
Power mockPower mock
Power mock
 
Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
 
Robocode
RobocodeRobocode
Robocode
 

06 colisao final

  • 1. Tópicos Especiais I: Colisão 1º Semestre 2010 > PUCPR > Pós Jogos Bruno C. de Paula
  • 2. Resumo  Vamos conhecer as funcionalidades de colisão que o Unity 3D implementa;  Também discutiremos diversos scripts que lidam com a colisão;  Por fim, vamos tratar da técnica de ray casting;  Lembre-se: o tratamento da colisão nem sempre é necessário. Deixe a responsabilidade para a física quando puder! Exemplo Arkanoid.
  • 3. Colisão  Interação física entre objetos do jogo;  Rede invisível que está ao redor do objeto;  Podemos trabalhar com a colisão imediatamente quando ocorre;  Pode-se prever a colisão usando a técnica de Ray Casting; 312/09/13
  • 4. Problema do frame miss  O que acontece quando a bala é rápida demais? 412/09/13
  • 5. Solução com ray casting 512/09/13
  • 6. Tipos de colisores  Cada um tem uma utilidade diferente;  Component > Physics 612/09/13
  • 7. Tipos de componentes de colisão  Box: caixas, objetos, personagens;  Sphere: objetos esféricos, personagens;  Capsule: personagens do jogador;  Mesh: malha do objeto, mais pesado computacionalmente;  Wheel: roda, uso com veículos;  Raycast: dispara raio de colisão, uso com veículos;  Composto: união entre diversos colisores;  Character Controller: componente de colisão para personagem do jogador; 712/09/13
  • 8. Static Collider X Rigidbody  Static Collider é para objetos cuja física e colisão é menos necessária;  Rigidbody é para objetos com física; 812/09/13
  • 9. Rigidbody  Tem massa, resistência do ar, gravidade, elasticidade baseada no material, etc;  É possível movê-lo via scripting, mas deve ser evitado;  Usar evento FixedUpdate, chamado em um tempo fixo; 912/09/13
  • 10. Script Adicionando uma força a um objeto AddForce – eixo mundo 1012/09/13 var vel = 10; function FixedUpdate () { var f : Vector3; // X vai de -1 a 1 f.x = Input.GetAxis("Horizontal"); f.y = 0; f.z = 0; // Aplica uma velocidade f = f * vel; // Força é aplicada no eixo X rigidbody.AddForce(f); }
  • 11. Script Adicionando uma força a um objeto AddRelativeForce – eixo local 1112/09/13 var vel = 10; function FixedUpdate () { var f : Vector3; // X vai de -1 a 1 f.x = Input.GetAxis("Horizontal"); f.y = 0; f.z = 0; // Aplica uma velocidade f = f * vel; // Força é aplicada no eixo X rigidbody.AddRelativeForce(f); }
  • 12. Character Controller  Não é fisicamente realista (isto pode ser bom!)  Height: altura;  Radius: raio;  Slope Limit: limite de subida em rampas;  Skin Width: quanto sobe em degraus;  Min Move Distance: controla jitter;  Center: posição;  O FPS Walker já aplica o Character Controller. 1212/09/13
  • 13. Script Movimento a partir do teclado 1312/09/13 var vel = 10; function Update () { var f : Vector3; f.x = Input.GetAxis("Horizontal"); f.y = 0; f.z = Input.GetAxis("Vertical"); f = f * vel; f = f * Time.deltaTime; // GetComponent acessa um componente do objeto var controller = GetComponent(CharacterController); controller.Move(f); }
  • 14. Eventos de Colisão  OnCollisionEnter: chama quando inicia uma colisão;  OnCollisionStay: chamado uma vez por frame enquanto está se chocando no corpo;  OnCollisionExit: chamado quando a colisão é finalizada;  OnControllerColliderHit: colisão com character controller; 1412/09/13
  • 15. Script Obtém o objeto com o qual colidiu function OnCollisionEnter(objetoColidido : Collision) { print("Colidiu com: "+ objetoColidido.gameObject.name); }
  • 16. Script Destrói tudo que toca function OnControllerColliderHit(obj : ControllerColliderHit) { Destroy(obj.gameObject); }
  • 17. Script Enviar uma mensagem function OnControllerColliderHit(obj : ControllerColliderHit) { col.gameObject.SendMessage("Destruir"); }  Para que a mensagem enviada seja tratada pelo objeto colido, este deve possuir uma função com o mesmo nome da mensagem;
  • 18. Script Modifica propriedades de um objeto diferente  GameObject.Find procura um objeto a partir de seu nome; function OnControllerColliderHit(obj : ControllerColliderHit) { // Encontra o GameObject com o nome indicado txt = GameObject.Find("txt"); // Escreve o nome na tela txt.guiText.text += obj.gameObject.name; }
  • 19. Script Só modifica objeto marcado por tag function OnControllerColliderHit(obj : ControllerColliderHit) { if(obj.gameObject.tag=="bloco") { // Encontra o GameObject com o nome indicado txt = GameObject.Find("txt"); // Escreve o nome do obj na tela txt.guiText.text=obj.gameObject.name; } }  Cada objeto pode ser associado a uma tag de identificação;
  • 20. Triggers Gatilhos  Triggers são ignorados pelo engine de física;  Úteis para o disparo de eventos: Cutscenes; Abertura de portas; Passagem de mensagem em tutoriais; Itens de energia;  Triggers agem como interruptores;
  • 21. Eventos de trigger  OnTriggerEnter: chamado imediatamente quando o colisor entra no trigger;  OnTriggerStay: mensagem mandada ao trigger e aos seus colisores enquanto estiver colidindo;  OnTriggerExit: chamado quando o colisor sai do trigger.
  • 22. Script Transporta um objeto à frente após passar pelo Trigger function OnTriggerEnter(col : Collider) { //Move o objeto no eixo z (andar para frente) col.transform.Translate(0, 0, 10); }
  • 23. Raycast  Colisão preditiva;  Útil em: Projéteis rápidos; Disparo de colisão e triggers quando o personagem deve estar olhando para o trigger;  Função Physics.Raycast(posição, direção, distância);
  • 24. Script Verifica se há objeto à frente function Update () { var hit : RaycastHit; // Olha 10 metros à frente if (Physics.Raycast (transform.position, transform.forward, hit,10)) { print ("Tem alguma coisa na minha frente"); // Desenha uma linha para representar o raio Debug.DrawLine (transform.position, hit.point); } else { print("Sem nada no caminho"); }
  • 25. Ignorando a colisão  Necessário quando se cria tiros e projéteis;  Função Physics.IgnoreCollision;
  • 26. Script Criando projétil e ignorando a colisão var projectile : Rigidbody; var speed = 20; function Update() { if( Input.GetButtonDown( "Fire1" ) ) { var instantiatedProjectile : Rigidbody = Instantiate( projectile, transform.position, transform.rotation ); instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) ); Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider ); } }
  • 27. Para saber mais  Capítulo do livro “Unit Game Development Essentials”: http://www.packtpub. com/article/unity-game-development-interactio  Fonte de algumas figuras desta apresentação! 2712/09/13

Notas do Editor

  1. Fonte da figura: Unity Game Development Essentials http://www.packtpub.com/article/unity-game-development-interactions-part1 12/09/13
  2. Fonte da figura: Unity Game Development Essentials http://www.packtpub.com/article/unity-game-development-interactions-part1 12/09/13