tópicos especiais i: colisão

27
Tópicos Especiais I: Colisão 1º Semestre 2010 > PUCPR > Pós Jogos Bruno C. de Paula

Upload: bevan

Post on 05-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

Bruno C. de Paula. Tópicos Especiais I: Colisão. 1º Semestre 2010 > PUCPR > Pós Jogos. 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 ; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tópicos Especiais I:  Colisão

Tópicos Especiais I: Colisão

1º Semestre 2010 > PUCPR > Pós Jogos

Bruno C. de PaulaBruno C. de Paula

Page 2: Tópicos Especiais I:  Colisão

ResumoVamos 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.

Page 3: Tópicos Especiais I:  Colisão

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;

320/04/23

Page 4: Tópicos Especiais I:  Colisão

Problema do frame miss

O que acontece quando a bala é rápida demais?

420/04/23

Page 5: Tópicos Especiais I:  Colisão

Solução com ray casting520/04/23

Page 6: Tópicos Especiais I:  Colisão

Tipos de colisores

Cada um tem uma utilidade diferente;Component > Physics

620/04/23

Page 7: Tópicos Especiais I:  Colisão

Tipos de componentes de colisãoBox: 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;

720/04/23

Page 8: Tópicos Especiais I:  Colisão

Static Collider X Rigidbody

Static Collider é para objetos cuja física e colisão é menos necessária;

Rigidbody é para objetos com física;

820/04/23

Page 9: Tópicos Especiais I:  Colisão

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;

920/04/23

Page 10: Tópicos Especiais I:  Colisão

ScriptAdicionando uma força a um objetoAddForce – eixo mundo

1020/04/23

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); }

Page 11: Tópicos Especiais I:  Colisão

ScriptAdicionando uma força a um objetoAddRelativeForce – eixo local

1120/04/23

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); }

Page 12: Tópicos Especiais I:  Colisão

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.

1220/04/23

Page 13: Tópicos Especiais I:  Colisão

ScriptMovimento a partir do teclado

1320/04/23

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); }

Page 14: Tópicos Especiais I:  Colisão

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;

1420/04/23

Page 15: Tópicos Especiais I:  Colisão

ScriptObtém o objeto com o qual colidiu

function OnCollisionEnter(objetoColidido : Collision) { print("Colidiu com: "+

objetoColidido.gameObject.name);}

Page 16: Tópicos Especiais I:  Colisão

Script Destrói tudo que toca

function OnControllerColliderHit(obj : ControllerColliderHit) {

Destroy(obj.gameObject);}

Page 17: Tópicos Especiais I:  Colisão

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;

Page 18: Tópicos Especiais I:  Colisão

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;}

Page 19: Tópicos Especiais I:  Colisão

ScriptSó 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;

Page 20: Tópicos Especiais I:  Colisão

TriggersGatilhosTriggers 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;

Page 21: Tópicos Especiais I:  Colisão

Eventos de triggerOnTriggerEnter: 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.

Page 22: Tópicos Especiais I:  Colisão

ScriptTransporta 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);}

Page 23: Tópicos Especiais I:  Colisão

RaycastColisã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);

Page 24: Tópicos Especiais I:  Colisão

ScriptVerifica 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"); }}

Page 25: Tópicos Especiais I:  Colisão

Ignorando a colisãoNecessário quando se cria tiros e

projéteis;Função Physics.IgnoreCollision;

Page 26: Tópicos Especiais I:  Colisão

Script Criando projétil e ignorando a colisãovar 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 ); }}