Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. 2D Games
Gamedevelopment

Mecánica Plataformera: Plataformas Móviles

by
Difficulty:BeginnerLength:MediumLanguages:

Spanish (Español) translation by Ricardo Mayén (you can also view the original English article)

Final product image
What You'll Be Creating

En este tutorial aprenderás cómo crear plataformas móviles y te asegurarás que los objetos que viajan en ellas preservarán su posición relativa. También retomaremos el caso de ser aplastado entre una plataforma y el suelo.

Prerequisitos

Este tutorial esta basado en la serie Física Plataformera Básica. Específicamente, usaremos el código basado en la octava parte del tutorial como punto de partida con unas pocas modificaciones. Revisa la serie tutorial, y particularmente la última parte. Los principios detrás de la implementación serán válidos aun si estás usando una solución física diferente, pero el código será compatible con la versión presentada en esta serie tutorial.

Demo

Puedes descargar el demo de los adjuntos del tutorial. Usa las teclas WASD para mover el persona, Espacio para recrear un personaje clon, y P para recrear una plataforma móvil. El botón derecho del ratón crea una baldosa. Puedes usar la rueda de desplazamiento y las teclas de flecha para seleccionar una baldoza que quieres colocar. Los deslizadores cambian la medida del personaje del jugador.

El demo ha sido publicado bajo Unity 2017 .2b4, y el código fuente también es compatible con esta versión de Unity.

Implementación

Plataformas Móviles

Antes que todo, creemos un libreto para una plataforma móvil.

Inicialización

Comencemos por crear la clase del objeto.

Ahora inicialicemos algunos parámetros básicos del objeto en la función init.

COnfiguramos el tamaño y la velocidad, y hacemos el colisionador cinemático, lo cual significa que no será movido por objetos regulares.. También establecemos el mSlopeWallHeight a 0, lo cual significa que la plataforma no escalará las pendientes—siempre las tratará como muros.

Comportamiento

El comportamiento para esta plataforma móvil en particular será justo de esta manera: comenzar el movimiento a la dereche, y siempre que encuentres un obstáculo. cambia la dirección 90 grados en sentido de las agujas del reloj.

Aquí está el patrón visualizado:

The pattern visualized

Pegando el Personaje a la Plataforma

En este momento, si un personaje permanece de pie en una plataforma, la plataforma simplemente se deslizará por debajo, como si no hubiera fricción entre los objetos. Trataremos de remediar esto, al copiar el intervalo de la plataforma.

The offset of the platform

Determina el Objeto Padre

Antes que todo, queremos estar concientes de en qué objeto, si hay alguno, nuestro personaje está parado. Declaremos una referencia para ese objeto en la clase MovingObject.

Ahora en el UpdatePhysicsResponse, si detectamos que estamos colisionando con un objeto debajo de nosotros, podemos asignar esta referencia. Creemos una función que asignará la referencia primero.

Ahora usémoslo en lugares apropiados; es decir, donde sea que digamos que nuestro objeto está colisionando con otro objeto debajo de él.

El primer lugar es cuando revisamos si los objetos se están tocando.

El segundo lugar es donde ellos se superponen.

Ahora que hemos cubierto esto, manipulemos el movimiento para nuestro objeto. Modifiquemos la función UpdatePhysics del tutorial previo.

Declaremos una variable de clase para el intervalo que necesitamos mover nuestro personaje.

Ahora reemplacemos el viejo intervalo local con el de clase.

En caso que el objeto esté en una plataforma, agreguemos el movimiento de la plataforma al intervalo.

Fijate que aquí estamos también revisando si aún estamos en contacto con el objeto. Si no es el caso, entonces configuramos el mMountParent a null, para marcar que esté objeto ya no está montado sobre cualquier otro.

A continuación, movamos la posición de nuestro objeto cerca de ese intervalo. No vamos a usar nuestra función Move, sino simplemente cambiar la posición. Entonces en la colisión revisa entre los objetos, lo cual se lleva a cabo justo después del UpdatePhysics, obtendremos el resultado para las posiciones en este marco en vez del previo.

Ahora movamonos al UpdatePhysicsP2, el cual es convocado después de que las colisiones entre los objetos han sido resueltas. Aquí deshacemos nuestro movimiento previo, el cual no ha sido revisado si es válido o no.

Luego procedemos al UpdatePhysicsResponse a aplicar un movimiento fuera de la superposición con otros objetos. Aquí, previamente estabamos modificando la posición directamente, pero ahora en cambio modifiquemos el mOffset, así que este cambio de posición se resuelve luego cuando usamos nuestra función Move.

Ahora podemos regresar al UpdatePhysicsP2, donde simplemente convocamos las funciones UpdatePhysicsResponse y Move como hicimos antes, para obtener el estado de posición correcto.

Corrige el Orden de la Actualización

Debido a la manera en que ordenamos las actualizaciones de física, si el objeto hijo es actualizado antes que el objeto padre, el hijo constantemente estará perdiendo contacto con la plataforma cuando viajen de arriba hacia abajo.

Traveling up or down

Para corregir esto, siempre que configuramos el mMountParent, si la plataforma está detrás del hijo en la línea de actualización, cambiamos a estos dos, de manera que el objeto padre siempre actualice primero. Hagamos esa modificación en la función TryAutoMount.

Como puedes ver, si la identificación de actualización del objeto de la plataforma es más grande que el hijo, el orden de actualización de los objetos se cambia de lugar, removiendo el problema.

The order of the objects

Eso es básicamente todo cuando se trata de pegar el personaje a la plataforma móvil.

Detecta Cuando Eres Aplastado

El detectar ser aplastado es bastante simple. En la UpdatePhysicsResponse, necesitamos ver si la superposición contra un objeto cinemático nos mueve hasta una pared.

Encarguemonos del eje X primero:

Si el objeto está a nuestra derecha y ya estamos presionando contra una pared a la izquierda, entonces llamemos una función Crush, la cual implementaremos posteriormente. Haz lo mismo para el otro lado.

Repitamos eso para el eje Y.

La función Crush simplemente moverá al personaje al centro del mapa para el demo.

El resultado es que el personaje es teleportado cuando está siendo aplastado por una plataforma.

Being crushed by a platform

Resumen

Este fue un tutorial corto porque agregar plataformas móviles no es un reto grande, especialmente si conoces bien el sistema de física. Al tomar prestado de todo el código en la serie tutorial de física, este fue un proceso muy fluido.

¡Este tutorial ha sido solicitado unas cuantas veces, así que espero que lo encuentres útil! ¡Gracias por leer, y nos vemos la próxima vez!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.