En este video te explicamos en detalle todo el proceso para publicar una Aplicación Android…
Ejemplo de implementación de Físicas 3D: Hinge Joint
6.
Ejemplo de implementación de Físicas 3D: Hinge Joint
En esta publicación veremos el segundo ejemplo práctico de físicas en Unity 3D, en este caso, con una implementación del componente Hinge Joint, que nos permitía agrupar dos objetos rigidbody a modo de bisagra, limitando su movimiento.
En el ejemplo simularemos un personaje enemigo de un videojuego, diseñándolo con objetos primitivos de tipo cube, al que iremos disparando proyectiles. Implementaremos varios GameObjects vacíos que servirán de unión entre esos cubos, de forma que al recibir el impacto permanecerán unidos. También implementaremos un script ‘colisiones’ que permitirá romper esa unión.
En el siguiente video, podemos hacernos una idea mejor del funcionamiento de este script y del uso del componente Hinge Joint:
Veamos ahora los elementos que necesitamos para realizar este proyecto ejemplo
Estructura Proyecto Hinge Joint:
Elementos comunes para los dos proyectos (éste y el anterior que desarrollamos sobre los componentes Clloth y Skinned Mesh Renderer):
- GameObject Terrain para posicionar los objetos del ejemplo.
- GameObject Directional Light para iluminar la escena del juego.
- GameObject Camera para representar la vista del juego en tercera persona.
Elementos para implementar el componente Hinge Joint:
- Cuatro GameObjects de tipo Cube, que se asociarán utilizando el componente Hinge Joint para evitar que se separen cuando persigan al personaje del usuario a lo largo de la pantalla.
- Tres GameObjects vacíos, que implementarán un componente rigidbody cada uno, y que servirán de objetos de unión entre los diferentes cubos que definen al enemigo.
- Script denominado Colisiones que permitan romper individualmente la unión establecida entre los diferentes cubos que forman el enemigo.
Descompongamos ahora los pasos para crear este ejemplo:
En primer lugar se añadirán cuatro GameObjects de tipo cube, situándolos uno encima de otro con diferentes tamaños. Además los tres primeros cubos de la pirámide incluirán un objeto hijo formado por los componentes Transform y Rigidbody:
Posteriormente, a cada objeto cube se le añadirá un componente Rigidbody e Hinge Joint, seleccionando este último desde el botón Add Component > Physics > Hinge Joint (con excepción del cubo situado en la base de la pirámide que no incluirá un componente Hinge Joint). A continuación se asignará cada objeto hijo «UnionX» a la propiedad Connected Body del componente Hinge Joint del GameObject cube situado justo encima:
Finalmente, se implementa un script denominado «Colisiones», que permitirá romper la unión establecida entre los diferentes objetos que construyen el enemigo de manera individual.
Este script (implementado en el prefab Proyectil comentado en otras secciones del curso de Unity) sobrescribe el método OnCollisionEnter()
, que será llamado cuando el objeto que implementa este script colisione con otro objeto que también defina un rigidbody o collider. En él se declara e inicializa una variable de tipo GameObject por cada uno de los objetos encargados de mantener unido al enemigo, y que se establece una condición por cada colisión que puede producirse con los diferentes cubos que lo representan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class Colisiones : MonoBehaviour { void OnCollisionEnter(Collision collision) { GameObject union1 = GameObject.Find("Union1"); GameObject union2 = GameObject.Find("Union2"); GameObject union3 = GameObject.Find("Union3"); if (collision.gameObject.name == "Cube1") { Destroy (union1); } else if (collision.gameObject.name == "Cube2") { Destroy (union2); } else if (collision.gameObject.name == "Cube3") { Destroy (union3); } else { print ("No se ha producido ninguna colisión"); } } } |