A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tópicos Especiais I: Colisão

Apresentações semelhantes


Apresentação em tema: "Tópicos Especiais I: Colisão"— Transcrição da apresentação:

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

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;
23/03/2017 23/03/2017 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; Fonte da figura: Unity Game Development Essentials

4 Problema do frame miss O que acontece quando a bala é rápida demais?
23/03/2017 23/03/2017 O que acontece quando a bala é rápida demais? Fonte da figura: Unity Game Development Essentials

5 Solução com ray casting
23/03/2017

6 Tipos de colisores Cada um tem uma utilidade diferente;
23/03/2017 Cada um tem uma utilidade diferente; Component > Physics

7 Tipos de componentes de colisão
23/03/2017 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;

8 Static Collider X Rigidbody
23/03/2017 Static Collider é para objetos cuja física e colisão é menos necessária; Rigidbody é para objetos com física;

9 Rigidbody 23/03/2017 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;

10 Script Adicionando uma força a um objeto AddForce – eixo mundo
23/03/2017 Script Adicionando uma força a um objeto AddForce – eixo mundo 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
23/03/2017 Script Adicionando uma força a um objeto AddRelativeForce – eixo local 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!)
23/03/2017 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.

13 Script Movimento a partir do teclado
23/03/2017 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;
23/03/2017 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;

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
Para que a mensagem enviada seja tratada pelo objeto colido, este deve possuir uma função com o mesmo nome da mensagem; function OnControllerColliderHit(obj : ControllerColliderHit) { col.gameObject.SendMessage("Destruir"); }

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
Cada objeto pode ser associado a uma tag de identificação; 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; }

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”:
23/03/2017 Capítulo do livro “Unit Game Development Essentials”: Fonte de algumas figuras desta apresentação!


Carregar ppt "Tópicos Especiais I: Colisão"

Apresentações semelhantes


Anúncios Google