27.- Destrucción de objetos y funciones de colisión
Destruir un GameObject es acabar con sus acciones en un juego y memoria, es una parte importante para cuidar el rendimiento y el manejo de instancias.
Para hacer unas pruebas creamos el Script DestroyObjects.Cs y lo asignamos al Cubo de nuestro proyecto, antes de probar desactive los otros Scripts y asigne el nuevo.
Al ejecutar, su cubo se destruye de forma instantánea: Destroy(gameObject);
En la segunda opción se destruye en 3 segundos:
Los ejemplos de Scripts mostrados son una especie de “carta de suicidio” del GameObject.
La regla básica para destruir es... “Si no es útil, que no consuma mi memoria.
Eventos de colisión.
Es momento de entrar a la parte esencial del motor Unity, la razón que lo hace sencillo de programar y aún más diferente a los otros lenguajes de programación ordinarios.
Las funciones o eventos de colisión son la base para detectarse entre objetos, existen 2 básicas: Colisiones normales OnCollisionEnter y OnTriggerEnter
OnCollisionEnter:
Las colisiones normales entre objetos con rigidbody, si dos objetos se tocan el evento se dispara y obtenemos datos del golpe en un parámetro tipo Collision.
En otras palabras... “conocemos el nombre del golpeador.”
OnTriggerEnter.
La función OnTriggerEnter se ejecuta al colisionar objetos con la casilla Trigger activada, a diferencia del anterior, nuestro objeto es una especie de “fantasma” , el trigger lo hace trasparente a la física pero si existe colisión por código, también obtenemos datos en un parámetro Collider.
Creamos un Script de pruebas: ObjectCollisions.Cs
Para probar necesitamos una pelota y una especie de piso,
creamos un Cubo y le damos una forma plana, asigne el nombre: Floor.
Asigne la escala (4,0.2,4)
Posición (0,0,0)
Con nuestro piso (Floor) en escena creamos una esfera y la renombramos como Ball.
Acomode los objetos como se muestra:
Conserve la escala (1,1,1)
Posición (0,0,0)
Al ejecutar debe ver la pelota caer y la consola imprimiendo:
Function enter collision with... Floor.
Significa que la pelota conoce el nombre de la barrera que provocó su colisión.
El colisionador es el verdadero objeto de juego en Unity, los Sprites y los modelos 3D son básicamente adornos, todo se basa en decidir que hacer con el objeto que nos colisionó, sea ganar puntos, destruirlo o autodestruirse.
Las colisiones con fuerza de gravedad son por ejemplo cuando el player cae sobre una plataforma, una pelota lo golpea o un carro lo atropella, todas responden a la fuerza de gravedad, aparte nosotros vemos como nuestro cuerpo u otros reaccionan rebotando contra el colisionador.
En la colisión tipo trigger no se ve el golpe, es como si los objetos fueran fantasmas.
En el mismo Script escriba la función OnTriggerEnter...
Para activarla seleccione la pelota y active la casilla Trigger del SphereCollider .
Como pudo notar la pelota traspasa el piso debido al Trigger, aún así el evento se dispara.
Este tipo de colisión es útil en casos como tomar una moneda en el aire, tocar fuego, o cosas que deben sentirse como hologramas para el jugador.