Saltear al contenido principal

Ejemplo de implementación de Físicas 3D: Hinge Joint

Conociendo Unity3D (VI)
1. MakeHuman y Blender: diseño y modelado 3D de personajes
2. Creación de personaje con MakeHuman y Blender para Unity 3D
3. Video: creación personaje para juego en Unity3D
4. Componentes para Físicas en Unity 3D: indumentaria y articulaciones
5. Ejemplo de implementación de Físicas 3D: Cloth y Skinned Mesh Renderer
6. Ejemplo de implementación de Físicas 3D: Hinge Joint
7. Físicas en Unity 3D: Asistente Ragdoll
8. Video: implementación Asistente Ragdoll en Unity 3D
9. Mecanim: sistema de animación en Unity
10. Videotutorial: creación de animación en Unity 3D con Mecanim

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:

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:

EnemigoInspector union

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:

Diagrama unir cube 1 y cube2

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:

 


Volver arriba