Jump to content
UnitySpain
Sign in to follow this  
javi89SFC

Crear simulacion excavacion de tierra

Recommended Posts

Buenas 

estoy intentando crear una animacion o simulacion de una excavadora sacando tierra del suelo, pero no se de que manera crear la simulacion, seria en plan lowpoly con cubos y tal..

os dejo un ejemplo de a lo que me refiero https://youtu.be/7ttkvnMcFlw?t=118

espero que me podais  dar algun consejo

Gracias!

Edited by javi89SFC

Share this post


Link to post
Share on other sites

Entiendo 2 situaciones.

- Una es que la excavadora sólo excava en un punto específico una cantidad predeterminada, como el efector para una escena o un objeto que rompe el suelo para que el jugador pueda continuar el nivel. En este caso creo que hacer un suelo con animación. O un conjunto de cubos que se vayan eliminando con el contacto de la pala. (imagínate algún trigger en la pala, que cada vez que detecta una roca, esta roca se rompa).

- O que la excavadora puede triturar en cualquier parte, eso es más complejo, creo que su manera sería con algún Terrain de Unity, que cuando la excavadora empiece a trabajar, pues se empiece a bajar la altura del terrain en ese punto.

El objeto "Terrain" tiene la clase "TerrainData" y esta tiene el método SetHeights que permite cambiar la altura del terrain en un punto XY https://docs.unity3d.com/ScriptReference/TerrainData.SetHeights.html , el problema de dicho método, es que creo que actúa directamente sobre el terrain original, no alguna instancia, (es decir, si haces modificaciones al terrain durante el juego, cuando vuelvas a cargar la escena, dicha modificación debería permanecer) imagino que de ser así, habría que intentar clonar el terrain que se usa en el juego.


En fin, habría que examinarlo, pero creo que los tiros podrían ir por ahí.

Share this post


Link to post
Share on other sites

Gracias por contestar,

En cuanto al modo de excavación seria en puntos específicos, es decir colocaría instancias aleatorias, en cuento en lo que dices, si, puedo poner un triguer al suelo y a la excavadora para que vaya eliminandose con contacto. pero el efecto ese de caer los cubos y que se vayan amontonando no se como podría ser.

Share this post


Link to post
Share on other sites

Se supone que en Unity, hay una forma de crear meshes 3d mediante código, aunque nunca lo he hecho. O_ò

Aún así, desmontando el problema, veo 2 tareas.
1 - Saber como será la masa de tierra que suelta.

2- Usar esa información para construir / modificar un mesh.

 

1 - Saber como será la masa de tierra que suelta.

En el vídeo parece que se ve todo como cubitos, esto creo que podría ser un mapa de casillas. Imagínate un tablero de ajedrez, (hecho con 2 arrays). En cada casilla, habrá un valor que sería la cantidad de tierra que tiene. Cuando el jugador suelta tierra en un punto, se calcula cual es ese punto en referencia al tablero (puedes usar la función Math.floor para simplificar un poco), cuando suelte, puede haber un algoritmo que diga por ejemplo:

Si estoy en la capa 1, y mi X3, Y3 ya es 1, entonces antes de incrementarlo a 2, voy a mirar las casillas adyacentes, si están a 0, las pongo a 1 (y por cada casilla que añado, le quito 1 a la pala mientras tenga tierra). 

A lo mejor puedo comprobar 2 o 3 áreas de adyacentes, pero entonces si mi pala sigue teniendo tierra, pues entonces ya paso a la capa 2 (subo de nivel, me pongo un poco más alto) y vuelvo a comprobar. En capa 2, como mi X3 Y3 es 1, entonces ahí ya sí lo subiría a 2. Y si quedan unidades de tierra en la pala, volvería a comprobar adyacentes.


Me parece que se puede complicar más para que la cosa se extienda más o quede más compacto dependiendo del número de comprobaciones a los adyacentes, pero al final, debería quedar el tablero con números que sean la altura de la tierra.

 

 

2- Usar esa información para construir / modificar un mesh.

Si tienes el tablero (los 2 arrays), lo que queda en este paso sería ir casilla por casilla y crear/colocar vértices como se deba. Habría que tener ojo y crear también las caras verticales de los cubos. Pero no sé como se crean objetos 3d mediante código en únity. O_ò

Una alternativa, es instanciar los cubos, aunque el resultado no es lo más optimizado. Pero sí sería algo más sencillo, un par de loops e ir creando cubos con la posición.y que diga el tablero de datos. (Se supone que los cubos no pasarán a niveles más altos hasta que los adyacentes hayan sido levantados, así que la montañita bien podría estar hueca y nadie notarlo O_ò). 

 

 

 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...