Unity 2D Joints Juntas de distancia, bisagra, objetivo y fijas

Lo que vas a crear

Introducción

Unity es un motor de juego bien conocido, bien documentado y muy reconocido. Es una solución multiplataforma y también le permite crear juegos o aplicaciones dirigidas a varias plataformas (iOS, Android, web y PC, entre otras). Originalmente, Unity se enfocaba en el desarrollo 3D, pero las versiones recientes proporcionan herramientas para el desarrollo 2D.

Unity es una excelente opción para los aspirantes a desarrolladores de juegos, ya que funciona para la mayoría de las plataformas móviles, de escritorio y de consola, y aún mejor, es de uso gratuito para desarrolladores y estudios de menores ingresos..

Uno de los componentes clave de Unity son las articulaciones físicas. Esas articulaciones tienen propiedades físicas (como su nombre lo sugiere) y le permiten crear varias conexiones entre objetos dentro de su escena.

Usando uniones, puede describir una conexión entre dos objetos, lo que significa que puede simular la física de casi cualquier objeto de varias partes que pueda imaginar, incluidas puertas, plataformas deslizantes, cadenas o incluso bolas de demolición.!

Este tutorial se centrará en explicar cómo funcionan las articulaciones de física 2D y cómo usarlas para lograr grandes efectos (sin sacrificar el rendimiento del juego).

Prerrequisitos

Primero, asegúrese de tener la última versión de Unity, que puede descargar aquí. En este tutorial estamos usando la versión. 5.4.1f1. Asegúrese de que está utilizando la última versión de Unity; De lo contrario, puede tener problemas para seguir el tutorial y utilizar las articulaciones de física..

Antes de comenzar, también me gustaría agradecer especialmente a Ryukin Studio por permitirnos usar su paquete 2D Platformer Art Pack - Demo para este tutorial.

A continuación, descargue el Unity2DJointsStarter expediente. Descomprime y abre el proyecto en Unity. La escena de demostración debe abrirse automáticamente, pero si no, puede abrirla desde el proyecto Escena carpeta.

La escena debe verse como sigue:


Como puede ver, tenemos un personaje y varias plataformas estáticas ubicadas alrededor de la escena. La idea detrás de este tutorial es crear un pequeño juego de plataforma 2D mientras se usan las uniones 2D para crear obstáculos que el jugador debe superar. A lo largo de este tutorial, podrás probar cada uno de los tipos de unión 2D de Unity y ver cómo funcionan, con la excepción de Junta de rueda 2D.

Si presionas jugar, verás que todas las funcionalidades básicas del juego ya están implementadas. Puedes usar las flechas del teclado para mover el personaje y la barra espaciadora para saltar..

Junta de distancia 2D

La junta de distancia permite que un sprite controlado por la física 2D gire alrededor de un punto específico, mientras mantiene una cierta distancia desde ese punto. Utilizará la junta de distancia 2D para crear el primer obstáculo, una cuchilla oscilante. Crear un nuevo GameObject en el Posición (4.75, -1.25, 0) y llamalo Espada.

A continuación, expanda la Juegos de juego carpeta y abra el Plataformas carpeta. Allí encontrará varios prefabs utilizados para crear las plataformas de nivel. Arrastrar el Plataforma6 prefabricar desde la carpeta y soltarlo sobre el Espada GameObject. Esto hará que sea hijo de ese objeto..

Ahora necesitas editar algunas de las propiedades de este nuevo objeto de juego. Primero, cambia el Plataforma6 nombre a Plataforma y luego su posición a (-0.07042211, 3.60032, 0). Ahora establece el Orden en la capa a 3 en el Sprite Renderer componente.

Dentro de Box Collider 2D, deshabilitar el Utilizado por efector parámetro y eliminar el adjunto Efector de plataforma 2D componente. Finalmente, agregue un Rigidbody 2D, conjunto Es cinemático a la verdad, y girar Rotación de congelación en en Z.

La plataforma que sostendrá la cuchilla está lista. Es hora de añadir la propia cuchilla. Dentro de Activos libres \ Sprite carpeta, seleccione la AxeBlade sprite y arrástrelo sobre el Espada GameObject, creando un nuevo niño..

Como probablemente habrá notado, el sprite es demasiado grande, y no está en el lugar correcto. Cambiar el Posición a (-0,11, 3,56, 0) y el Escala a (0.5, 0.5, 1). Además, establece el Orden en la capa a 2.

Antes de poder hacer que la cuchilla funcione, deberá agregarle varios componentes. Comience agregando un Polygon Collider 2D y un Rigidbody 2D. Asegúrese de que el Masa se establece en 10.

Ya está listo para agregar el Junta de distancia 2D. Añade el Junta de distancia 2D componente. Como puede observar, este nuevo componente tiene varios parámetros que puede ajustar para producir el mejor resultado para su juego.

No temas, pronto aprenderás qué hacen todos estos parámetros y cómo puedes ajustarlos. También notará que una vez que tenga el componente adjunto al AxeBlade, una línea verde se extiende desde el AxeBlade al centro de la pantalla. Este es el punto de origen, el Ancla conectada propiedad.

Ejecutar la escena, manteniendo su ojo en la hoja. Inmediatamente, notará que la hoja vuela a través de la pantalla hasta que se detiene cerca del punto de origen, luego comienza a girar hacia adelante y hacia atrás en la articulación. Tendrá que solucionar este problema.

Dirige tu atención a la Junta de distancia 2D componente en el Inspector. El primer parámetro es Habilitar colisión. Esto determina si los dos objetos conectados por la articulación pueden chocar entre sí o no. En este caso, no desea que esto suceda, así que no lo marque..

El segundo parámetro es Cuerpo rígido conectado. Si bien un extremo de la articulación a distancia permanece siempre conectado al objeto que contiene el componente, puede usar este campo para pasar una referencia a un objeto para el otro extremo de la conexión de la articulación. Si deja este campo vacío, Unity simplemente conectará el otro extremo de la junta a un punto fijo en la escena.

Quieres conectar AxeBlade a Plataforma en este caso, arrastra Plataforma al Cuerpo rígido conectado campo.

Con la conexión configurada y AxeBlade aún seleccionado, ahora debería ver los dos objetos conectados por la articulación en el Escena ver. Puede comprobar la conexión cambiando la Y valor de la AxeBlade. No hacerolvidarse deselecciona el AxeBlade Posición de regreso (-0,11, 3,56, 0) una vez que hayas terminado de jugar con él.

El siguiente parámetro del componente es Configurar automáticamente el ancla conectada. Debería marcar esta casilla si desea que Unity establezca automáticamente la ubicación del ancla para el otro objeto al que se conecta esta articulación. ¿Cuál es el ancla, puede preguntar? Bueno, hablaremos de eso en un momento, pero por ahora, debe aprender que el punto de anclaje se puede configurar de forma manual o automática (por Unidad).

En este caso, debe dejar este campo sin marcar, ya que vamos a configurar el ancla manualmente.

El siguiente parámetro es Ancla. Este indica dónde se une el punto final de la unión al GameObject como se especifica en el espacio de coordenadas locales del objeto. En el Escena vista, con AxeBlade seleccionado, puede ver el punto de anclaje como un círculo azul sin relleno centrado sobre AxeBlade. Deje el valor predeterminado sin modificar (0, 0).

Tenga en cuenta que el círculo azul sin relleno que representa el primer punto de anclaje de la junta puede aparecer lleno si actualmente tiene el Transformar herramienta seleccionada en el Escena ver. Asimismo, verás un cuadrado blanco si tienes la Escala herramienta seleccionada. En cualquier caso, alejar el ancla de (0, 0) mostrará que es un círculo sin relleno..

los Ancla conectada El parámetro especifica el punto de anclaje del otro extremo de la junta. Si el Cuerpo rígido conectado campo está vacío, este valor está en el sistema de coordenadas de la escena. Sin embargo cuando Cuerpo rígido conectado se establece, como lo es ahora, el Ancla conectada Las coordenadas se refieren al espacio de coordenadas local del cuerpo rígido conectado. Este punto de anclaje aparece en la imagen anterior como un círculo azul sólido centrado sobre la Plataforma objeto de juego. Una vez más, puedes dejar este valor en (0, 0).

Como con el Ancla parámetro, puede dejar que Unity establezca automáticamente la distancia de la articulación habilitando la Distancia de configuración automática campo. Cuando esta opción está activada, Unity detectará automáticamente la distancia entre los dos objetos y la establecerá como una distancia que la articulación mantiene entre ellos. En nuestro caso específico, queremos esta característica en.

los Distancia El parámetro, como su nombre indica, indica la distancia a mantener entre ambos objetos. Regreso en el Escena En la vista, puede ver una pequeña línea verde que cruza la línea que conecta los dos objetos. Esto se puede ver fácilmente si mueve el objeto AxeBlade desde el Plataforma, como en la imagen de abajo.

Esta línea indica la distancia impuesta por la articulación. Cuando corras la escena, la articulación se moverá. AxeBlade de manera que la Ancla Lo que definiste está en el punto donde está la línea pequeña. Puedes aumentar o disminuir este valor girando Auto configuración conjunta apagado. Recuerda configurar el AxeBlade posición de nuevo a-0,11, 3,56, 0) Una vez que haya jugado con sus valores. La distancia de configuración automática también debe estar marcada.

El siguiente parámetro es Sólo la distancia máxima. Si está habilitada, la articulación solo impondrá una distancia máxima, lo que significa que los objetos pueden acercarse más entre sí, pero nunca más allá del valor especificado en la Distancia campo. En este ejemplo, desea que la distancia sea fija, así que deje este parámetro sin marcar.

Finalmente, el último parámetro es Fuerza de rotura. Aquí puede especificar el nivel de fuerza que desea utilizar para romper la junta. Básicamente, si se alcanza el nivel de fuerza, la unión se eliminará y la conexión entre los dos objetos desaparecerá. Cuando el valor se establece en Infinito, significa que la unión es irrompible. Para este escenario, desea que sea irrompible, así que deje el campo como está.

Como quieres que la hoja oscile como un péndulo, cambia su Rotación a (0, 0, 310).

Ahora presiona Jugar, y verás el AxeBlade colgando de la Plataforma.

Ok, entonces la hoja está girando, pero cuando golpea al jugador, no pasa nada. Quieres matar al jugador y reiniciarlo en el último punto de control. Para ello, ve a la Juegos de juego carpeta, y abra el Guiones carpeta. Toma el Espada guión y agregarlo a la AxeBlade. Si presionas Jugar De nuevo, el jugador debería morir ahora cuando la hoja golpea..

La configuración final es la siguiente:


Para terminar, toma el Espada GameObject de la Jerarquía y soltarlo en el Obstáculos carpeta. Esto creará una prefabricada de la cuchilla oscilante..

Bisagra 2D

los Bisagra 2D El componente permite que un GameObject controlado por la física de cuerpos rígidos se adjunte a un punto en el espacio alrededor del cual pueda girar. La rotación puede ocurrir en respuesta a una colisión o ser iniciada por un par motor provisto por la propia junta. Puede y debe establecer límites para evitar que la bisagra realice una rotación completa.

Para aprender los conceptos básicos de la articulación de la bisagra, creará un mecanismo de doble trampilla en el que el jugador debe caer para continuar el nivel. Vamos a hacerlo!

Agrega un nuevo GameObject vacío, llámalo Bisagra, y colocarlo en el Posición (18.92, 0, 0). Luego, abre el Activos \ Activos libres \ Sprites y arrastra dos Plataforma de metal sprites en el Bisagra GameObject. Nombra el primero HingePlat1 y el segundo HingePlat2.

Colóquelos lado a lado; la HingePlat1 debe colocarse en Posición (0, 0, 0) y el HingePlat2 a (2.5, 0, 0). Cambiar el Orden en la capa de ambos a 2.

Para agregar el Bisagra 2D componente, es necesario agregar dos componentes adicionales a los sprites. Selecciona el HingePlat1 y agrega un Box Collider 2D y un Rigidbody 2D. Bajo la Rigidbody 2D parámetro, compruebe el Es cinemático propiedad. Ahora, repita los mismos pasos para la HingePlat2 (sin comprobar la propiedad es cinemática).

También puede notar que la tamaño del Box Collider 2D es más grande que el HingePlat1 sprite, lo que lleva a una detección de colisión incorrecta entre el jugador y la plataforma. Para solucionar el problema, cambie la propiedad. tamaño (dentro Box Collider 2D) de ambos HingePlat1 y HingePlat2 a (2,45, 0,5).

Esta HingePlat2 Será la trampilla inicial. Por lo tanto, es necesario asignar un nuevo componente llamado Bisagra 2D. Este componente tiene varias propiedades nuevas; solo cubriremos los nuevos.

Habilitar colisión significa que los dos objetos conectados pueden chocar entre ellos. Cuerpo rígido conectado especifica dónde está el otro objeto al que se conecta esta articulación. Añade el HingePlat1 a este campo. Usar motor Especifica si el motor de la bisagra debe estar habilitado. Debe comprobar esta propiedad. Velocidad del motor Especifica la velocidad del motor objetivo en grados / seg. Configurarlo para -100 (para volver a la posición original desde la posición ascendente).

Fuerza máxima del motor representa el par máximo (o rotación) que el motor puede aplicar al intentar alcanzar la velocidad objetivo. Deberías configurarlo para 25Límites de uso, como su nombre lo indica, representa el umbral del límite del ángulo de rotación. Revisalo!

Ángulo inferior es el extremo inferior del arco de rotación permitido por el límite, mientras que Ángulo superior es el extremo superior del arco de rotación permitido por el límite. Cambiar el Ángulo superior a 60. Par de Rotura es parecido a Fuerza de rotura y especifica el nivel de rotación necesario para romper y eliminar la junta. De nuevo, Infinito significa que es irrompible..

Ahora desmarque la Conexión de configuración automática. Debes configurar el Ancla y Ancla conectada a mano. El primero debe establecerse en (-1.12,0), y este último a1.09,0). Tu escena ahora debería verse como la siguiente imagen:


El final HingePlat2 la configuración es:

Corre tu juego, y probemos la primera trampilla..

Si todo está bien, es hora de seguir adelante y crear la segunda trampa. El procedimiento es exactamente igual a la descripción antes mencionada; La única diferencia radica en los detalles de configuración del Bisagra 2D. Los pasos principales son:

  1. Agrega dos adicionales Plataforma de metal sprites a la Bisagra GameObject.
  2. Nómbralos HingePlat3 y HingePlat4, y establecer el Orden en la capa a 2 y el Posición a (4.87, 0, 0) y7.25, 0, 0) respectivamente.
  3. Agrega un RigidBody 2D y un Box Collider 2D a ambas plataformas.
  4. Cambiar el tamaño de ambos Box Collider 2D a (2.45,0.5).
  5. HingePlat4 debería tener Es cinemático habilitado.
  6. Añade el Bisagra 2D propiedad a HingePlat3.
  7. Añade el HingePlat4 en el Cuerpo rígido conectado del HingePlat3.
  8. Desmarque la Conexión de configuración automática.
  9. Cambiar el Ancla a (1.5, 0) y el Ancla conectada a (-1, 0).
  10. Comprobar el Usar motor propiedad y establecer el Velocidad del motor a 100 y el Fuerza máxima del motor a 25.
  11. Comprobar el Límites de uso, y el Ángulo superior debiera ser -60.

Ejecuta tu juego, y vamos a probar la trampilla dual.

Como queremos forzar al jugador a pasar a través de la trampilla doble, debemos crear algunos muros a su alrededor. Selecciona el Bisagra GameObject y de la Activos \ Activos libres \ Sprites carpeta agregar seis Plataforma de metal en el Bisagra GameObject. Nómbrelos de Wall1 a Wall4 y cambiar el Orden en la capa a 2.

Colocar el Wall1 en el Posición (-0.9, -1.43, 0) y cambiar el Rotación Z a 90. El resto se debe configurar de la siguiente manera:

  • Posición Wall2: (-0.9, -3.8, 0), Rotación Z: 90 

  • Posición Wall3: (8.2, 1.55, 0), Rotación Z: 90

  • Posición Wall4: (8.2, 3.95, 0), Rotación Z: 90

Ahora, para cada muro debes agregar un componente adicional, un Box Collider 2D. Para cada Box Collider 2D cambiar el tamaño a (2.21, 0.63). A continuación agregue un Efector de plataforma 2D a cada pared y establecer el Arco de superficie a 360 y el Arco lateral a 180. Volver a la Box Collider 2D y turno Utilizado por efector en.

El resultado final debe ser similar a:

Finalmente, arrastre el Bisagra GameObject en el JuegoAssets \ Obstáculos Carpeta para crear tu segundo prefab..

Conjunto objetivo 2D

Target Joint 2D se conecta a un objetivo específico, en lugar de a otro objeto de cuerpo rígido, como lo hacen otras articulaciones normalmente. Aplicaremos esta junta para crear una plataforma de obstáculos que se mueve hacia arriba y hacia abajo..

Lo primero que debes hacer es crear la plataforma en sí. Sobre el Activos Libres / Sprites carpeta, allí encontrarás la Plataforma de metal duende. Arrástrelo y colóquelo en la escena..

Cambia su nombre a RisingPlatform y es Posición a (35, -6, 0), y establece el Orden en la capa a 2. Necesitas algunos componentes para que esto funcione. Agrega un Rigidbody 2D y un Box Collider 2D. A continuación, establezca la Masa a 20 y comprobar Posición de congelación X y Congelación de rotación Z. Sobre el Box Collider 2D, Asegúrate que tamaño se establece en (2,35, 0,55). Finalmente, establece el Escala de gravedad a 0 Para que el objeto no se vea afectado por la gravedad..

Los componentes básicos ya están listos. Ahora es el momento para que usted agregue el Conjunto objetivo 2D componente. Como se mencionó anteriormente, el Conjunto objetivo 2D No se conecta a otro objeto con un cuerpo rígido; en cambio, se conecta a un objetivo específico. Esta es una junta tipo resorte y puede usarse para levantar y mover objetos que actúan bajo la gravedad, como nuestra plataforma móvil..

Echemos un vistazo más de cerca al componente en sí. los Ancla Funciona exactamente igual que en las uniones anteriores, por lo que no es necesario explicarlo. los Objetivo Establece las coordenadas mundiales hacia las que intenta moverse el conjunto. Este es un campo muy importante, ya que esta unión intentará mantener una distancia lineal cero entre los Ancla y el Objetivo puntos. Para este ejemplo, desea que el Objetivo ser (35, -6).

A continuacion tienes Configuración automática de destino. Si esta propiedad está habilitada, la unión calculará el objetivo por sí misma. Si deja esta opción activada, el objetivo cambiará a medida que la plataforma se mueva. Como no desea que eso suceda, deje esta casilla sin marcar (desmarque Configuración automática de destino).

Lo siguiente es Fuerza maxima; Aquí establece la fuerza que la articulación puede aplicar al intentar alcanzar la posición de destino. Establezca este valor en 80.

los Relación de amortiguación es el grado en el que desea suprimir la oscilación del resorte. Este valor puede ir de 0 a 1, donde 1 significa que no hay movimiento. Desea que la plataforma se mueva libremente, así que establezca este campo en 0. A continuacion tienes Frecuencia que, como su nombre indica, establece la frecuencia con la que el resorte oscila al intentar alcanzar el objetivo. Establezca este parámetro en 5.

Finalmente, el último es. Fuerza de rotura, que es idéntico a las uniones anteriores, por lo tanto, deje que el valor permanezca en su valor predeterminado. 

Ya que desea que su plataforma se siga moviendo con el tiempo, necesita cambiar el Objetivo Posición de vez en cuando. Afortunadamente, ya tienes el script para manejar eso. Ve a la Guiones carpeta, encontrar el Guión TracktorPlatform, y añádelo a tu objeto de juego. Conjunto Objetivo A a (35, -6) y Objetivo B a (35, 0). los Hora debiera ser 2.

Al final, su componente debería verse así:

Si presionas Jugar, Debería poder ver el conjunto resultante resultante funcionando como se espera. No te olvides de crear una casa prefabricada, como hiciste con los obstáculos anteriores, y colócala en el Obstáculos carpeta.

Junta fija 2D

La Junta fija 2D se utiliza para mantener dos objetos controlados por la física de cuerpos rígidos en relación entre sí. Por lo tanto, ambos objetos siempre están desplazados en una posición y ángulo dados.

Para usar esta unión, creará una plataforma de metal que solo se puede mover cuando el jugador mueve un imán que se le une. El jugador tendrá que empujar el imán para quitar la plataforma de su camino y luego avanzar en el nivel.

Comience creando un GameObject vacío, asígnele el nombre MagnetPlatform, y establecer su Posición a (41.81, 5.22, 0). A continuación, toma el Imán sprite de la Sprites carpeta y soltarlo sobre el MagnetPlatform. Selecciona el Imán Posición a (0,55, 3,15, 0) y el Orden en la capa a 3.

A continuación, agregue un Rigidbody 2D componente y un Circle Collider 2D. Selecciona el Masa a 200 y turno Congelación de rotación Z en. Asegúrate que Radio sobre el Colisionador de círculos se establece en 0.4. Al final, tu Imán Debería verse algo como esto:


Ahora, desde el Sprites carpeta, arrastre el Plataforma de metal sprite en el MagnetPlatform GameObject. Selecciona el Posición del Plataforma de metal a (0.57, -1.73, 0), la Rotación a (0, 0, 90), y el Escala a (2, 1, 1). Selecciona el Orden en la capa a 3.

A continuación, agregue los siguientes componentes: Rigidbody 2D, y un Box Collider 2D. En Rigidbody 2D, selecciona el Masa a 1000 y habilitar Congelación de rotación Z. Finalmente, en BoxCollider 2D, selecciona el tamaño a (2,31, 0,52).

Ahora que todo está listo, es hora de que configure la unión fija 2D y establezca la conexión entre el imán y la plataforma metálica. Con Plataforma de metal seleccionado, agregue el FixedJoint 2D componente.

Esta nueva junta permite que dos objetos de juego con un cuerpo rígido mantengan un desplazamiento lineal y angular relativo entre sí. En este caso, desea que la plataforma de metal se mantenga a cierta distancia del imán..

Estas compensaciones lineales y angulares se establecen en las posiciones y orientaciones relativas de los dos objetos de juego conectados. Esto significa que cuando cambia la posición de uno de los objetos en el Vista de escena, También actualizarás las compensaciones..

Esta junta utiliza un resorte simulado que está configurado para ser lo más rígido posible. Sin embargo, es posible cambiar la fuerza del resorte y hacerlo más débil. Este resorte simulado aplica su fuerza entre los objetos y es responsable de mantener las compensaciones que desee..

Mirando el componente en sí, encontrará varios campos con los que ya está familiarizado.

Con la excepción de dos de esos campos, todos los parámetros funcionan exactamente igual que en las otras juntas, por lo que no es necesario explicarlos nuevamente. Con respecto a Relación de amortiguación, este parámetro representa el grado en el que desea suprimir la oscilación del resorte. Puede establecer valores de 0 a 1, donde 1 significa que no hay movimiento.

los Frecuencia es la frecuencia con la que el resorte oscila mientras los dos objetos conectados se acercan a la distancia de separación. Este parámetro puede tomar valores de 1 a 1000000. Cuanto más alto sea el valor, más rígido será el resorte..

Tenga en cuenta que, aunque los valores más altos significan un resorte más rígido, si configura Frecuencia a 0, el resorte estará completamente rígido.

Ahora, con respecto al obstáculo que intenta construir, todo lo que necesita hacer es arrastrar el Imán objeto de juego para el Cuerpo rígido conectado campo. Todos los demás parámetros se pueden dejar con sus valores predeterminados.

prensa Jugar y prueba el nuevo obstáculo.

Ahora que el obstáculo está listo, cree un prefab de él arrastrando el GameObject a la Obstáculos carpeta.

Conclusión

Con esto concluye el primer tutorial sobre Unity Joints 2D. Aprendió sobre cuatro juntas, a saber, la distancia, la bisagra, el objetivo y las juntas fijas. Con este conocimiento, ya puede comenzar a crear sus mundos 2D llenos de objetos dinámicos y complejos. En el segundo tutorial, aprenderá sobre las juntas deslizantes, relativas, de resorte y de fricción.

Si tiene alguna pregunta o comentario, como siempre, no dude en escribir una línea en los comentarios..