// Função chamada quando esse elemento colidir com outro. O outro elemento, junto com informações da colisão, são encontrados no parâmetro 'colisor' void OnCollisionEnter2D(Collision2D colisor) { bool colisãoInvalida = false; Vector2 normal = Vector2.zero; foreach (ContactPoint2D c in colisor.contacts) { normal += c.normal; } normal /= colisor.contacts.Length; normal.Normalize(); Plataforma plataforma = colisor.transform.GetComponent <Plataforma>(); GeradorDeArestas geradorDeArestas = colisor.transform.GetComponent <GeradorDeArestas>(); if (plataforma != null) // Se existir o componente Plataforma no game object com o qual a bolinha colidiu... { if (normal != Vector2.up) { colisãoInvalida = true; } else { particulaFolhas.transform.position = plataforma.transform.position; particulaFolhas.Play(); } } else if (geradorDeArestas != null) { if (normal == Vector2.up) { colisãoInvalida = true; } } else // Caso cairmos no else, estamos colidindo com um bloco, pois é o que sobra { colisãoInvalida = false; Bounds bordasColisor = colisor.transform.GetComponent <SpriteRenderer>().bounds; Vector3 posiçãoDeCriação = new Vector3(colisor.transform.position.x + bordasColisor.extents.x, colisor.transform.position.y - bordasColisor.extents.y, colisor.transform.position.z); GameObject particulas = (GameObject)Instantiate(particulaBlocos, posiçãoDeCriação, Quaternion.identity); ParticleSystem componenteParticulas = particulas.GetComponent <ParticleSystem>(); Destroy(particulas, componenteParticulas.duration + componenteParticulas.startLifetime); Destroy(colisor.gameObject); GerenciadorDoGame.numeroDeBlocosDestruidos++; } if (!colisãoInvalida) { Direção = Vector2.Reflect(Direção, normal); Direção.Normalize(); } else { GerenciadorDoGame.instancia.FinalizarJogo(); } }
// Função chamada quando esse elemento colidir com outro. // O outro elemento, junto com a info da colisão, são encontrados no 'collider' void OnCollisionEnter2D(Collision2D collision) { bool invalidCollision = false; Vector2 normal = collision.contacts[0].normal; Plataforma plataform = collision.transform.GetComponent <Plataforma>(); GeradorDeArestas edgeGenerator = collision.transform.GetComponent <GeradorDeArestas>(); if (plataform != null) // Se existir o componente Plataforma no game object com o qual a bolinha colidiu { if (normal != Vector2.up) { invalidCollision = true; } else { leafsParticle.transform.position = collision.transform.position; leafsParticle.Play(); } } else if (edgeGenerator != null) { if (normal == Vector2.up) { invalidCollision = true; } } else //Caso entre no else, estamos colidindo com um bloco { invalidCollision = false; Bounds collisionBorders = collision.transform.GetComponent <SpriteRenderer>().bounds; Vector3 creationPosition = new Vector3(collision.transform.position.x + collisionBorders.extents.x, collision.transform.position.y - collisionBorders.extents.y, collision.transform.position.z); GameObject particles = (GameObject)Instantiate(blocksParticle, creationPosition, Quaternion.identity); //instancia particula na posição do colisor ParticleSystem particleComponent = particles.GetComponent <ParticleSystem>(); Destroy(particles, particleComponent.duration + particleComponent.startLifetime); Destroy(collision.gameObject); //contém referência do objeto que a bolinha colidiu GerenciadorDoGame.numberOfBlocksDestroyed += 1; } if (invalidCollision) { GerenciadorDoGame.istance.endGame(); } else { direction = Vector2.Reflect(direction, normal); direction.Normalize(); } }
private void OnCollisionEnter2D(Collision2D collision) { bool invalidCollision = false; Vector2 normal = collision.contacts[0].normal; Plataforma plataform = collision.transform.GetComponent <Plataforma>(); GeradorDeArestas geradorDeArestas = collision.transform.GetComponent <GeradorDeArestas>(); if (plataform != null) // se existir o componente plataforma no game object com o qual a bolinha colidiu... { if (normal != Vector2.up) { invalidCollision = true; } else { leavesParticle.transform.position = plataform.transform.position; leavesParticle.Play(); } } else if (geradorDeArestas != null) { if (normal == Vector2.up) { invalidCollision = true; } } else // Caso caia aqui no else, estamos colidindo com um bloco, pois é o que sobra { invalidCollision = false; Bounds colliderBorder = collision.transform.GetComponent <SpriteRenderer>().bounds; Vector3 creationPosition = new Vector3(collision.transform.position.x + colliderBorder.extents.x, collision.transform.position.y - colliderBorder.extents.y, collision.transform.position.z); GameObject particle = (GameObject)Instantiate(blockParticle, creationPosition, Quaternion.identity); ParticleSystem particleComponent = particle.GetComponent <ParticleSystem>(); Destroy(particle, particleComponent.main.duration); Destroy(collision.gameObject); GerenciadorDoGame.destroyedNumberOfBlocks++; } if (!invalidCollision) { direction = Vector2.Reflect(direction, normal); direction.Normalize(); } else { GerenciadorDoGame.instancia.finishGame(); } }
void OnCollisionEnter2D(Collision2D colisor) { bool colisaoInvalida = false; Vector2 normal = colisor.contacts[0].normal; Plataforma plataforma = colisor.transform.GetComponent <Plataforma>(); GeradorDeArestas geradorDeArestas = colisor.transform.GetComponent <GeradorDeArestas>(); if (plataforma != null) { if (normal != Vector2.up) { colisaoInvalida = true; } } else if (geradorDeArestas != null) { if (normal == Vector2.up) { colisaoInvalida = true; } } else //Caso cairmos no else, estamos colidindo com um bloco, pois é o que sobra { colisaoInvalida = false; Destroy(colisor.gameObject); } if (!colisaoInvalida) { Direcao = Vector2.Reflect(Direcao, normal); Direcao.Normalize(); } else { GerenciadorDoGame.FinalizarJogo(); } }
void OnCollisionEnter2D(Collision2D colisor) { //Vector2 normal = colisor.contacts [0].normal; GeradorDeArestas geradorDeArestas = colisor.transform.GetComponent <GeradorDeArestas> (); // se acertar aresta if (geradorDeArestas != null) { //if(normal == Vector2.up){ GameObject particulas = (GameObject)Instantiate(particulaTiro, transform.position, Quaternion.identity); ParticleSystem componenteParticula = particulas.GetComponent <ParticleSystem>(); Destroy(particulas, componenteParticula.startLifetime + componenteParticula.duration); Destroy(this.gameObject); } //else{ // Direcao = Vector3.Reflect (Direcao, normal); //Direcao.Normalize (); //} //se acertar o morcego else { if (colisor.gameObject.tag.Equals("Finish")) { GameEngine.instancia.SomMatarMorcego(); Camera.main.GetComponent <Texto>().MarcaPonto(); GameObject particulas = (GameObject)Instantiate(particulaBat, transform.position, Quaternion.identity); ParticleSystem componenteParticula = particulas.GetComponent <ParticleSystem>(); Destroy(particulas, componenteParticula.startLifetime + componenteParticula.duration); //GameObject objeto = (GameObject) GameObject.FindWithTag ("Text"); //objeto.Text.text = "Pontos: "+GameEngine.pontuacao; Destroy(colisor.gameObject); Destroy(this.gameObject); } } }