sistema para dibujar cables y cuerdas automaticamente en unity

Sistema de Cableado para Unity

Introducción

En este artículo presento una solución para crear de manera automática cables que cuelgan desde dos o más puntos. El sistema nos permite modificar el espesor del cable, la curvatura y más parámetros para lograr el resultado que queramos.

El cable se dibuja utilizando el componente Line Renderer de Unity por lo que se genera de manera procedural utilizando expresiones matemáticas.

Paquete de Unity para Descargar

La solución consiste en un paquete de Unity que puedes importar en tu proyecto, esto creará una nueva carpeta en tu proyecto con los Assets que vienen en el paquete.

GDT Wiring System
Versión:1
Publicado:enero 5, 2020

Funcionamiento del Sistema de Cableado Automático

En la figura 1 se muestras los Assets que vienen dentro del paquete. En la escena puedes ver un tendido eléctrico que generé usando el sistema de cableado.

Para comenzar a usar el sistema podemos arrastrar el prefabricado “GDT Wire Container” a la jerarquía (cubo azul en la figura 1). Si no puedes crear un nuevo Empty GameObject y asignarle el Script “GDTWiringSystem” esto generará automáticamente todo lo necesario para el funcionamiento del sistema.

assets de unity para generar cables automaticamente
Fig. 1: El paquete para descargar contiene estos assets.

El objeto que tiene asignado el Script “GDTWiringSystem” será el encargado de dibujar el cable y sus hijos serán los puntos desde los cuales el cable estará colgado.

En la figura 2 vemos la componente “GDTWiringSystem”, aquí está todo lo necesario para darle forma al cableado.

inspector para un componente de unity para generar cables
Fig. 2: En el inspector podemos modificar los parámetros del cableado.

Agregar un nuevo punto para el cable

Para crear un nuevo punto de sostén para el cable, simplemente haz clic derecho en el objeto contenedor y luego en Create Empty, como se observa en la figura 3. Esto creará un nuevo hijo y el Script automáticamente le asignará un nombre.

No recomiendo crear nuevos hijos duplicando los que ya existen, ya que esto produce errores internos.

jerarquia de un proyecto en unity, crear empty gameobject
Fig. 3: Para agregar un nuevo punto al cableado hay que crear un nuevo hijo en el GameObject contenedor.

crear cables en unity via script
Fig. 4: Se crea un nuevo punto de sostén para el cable.

En la figura 4 vemos como al crear un nuevo punto, aparece un nuevo tramo de cable.

Cable cerrado

Si queremos generar un cable con sus extremos unidos podemos activar la opción “loopWire”, esto generará un nuevo tramo de cable que une el último punto con el primero.

inspector para un componente de unity para generar cables
Fig. 5: La opción loopWire hace que el último punto del cable se conecte con el primero.

En la figura 6 vemos que el cable se ha cerrado.

cables en unity con componente line renderer
Fig. 6: Con la opción loopWire vemos que el cable forma una curva cerrada.

Suavidad del Cable

El parámetro subdivisiones nos permite elegir la cantidad de segmentos que habrán entre dos puntos del cable, inicialmente vale 1, lo cual implica que los puntos del cable se unen con líneas rectas, para que el cable tenga curvatura debemos elegir un parámetro de subdivisión mayor a 1.

Cuanto mayor sean las subdivisiones, más suave será la curvatura del cable. El máximo del rango está seteado en 15 pero puede aumentarse abriendo el Script y modificando la instrucción “[Range(1,15)]” con el valor que se necesite.

inspector para un componente de unity para generar cables
Fig. 7: Si aumentamos las subdivisiones conseguiremos curvas más suaves.

Curvatura del Cable

Para modificar la concavidad del cable, es decir qué tan intensa es su curvatura, tenemos los Sliders dentro del vector “Curvature Parameters”, como vemos en la figura 8. Estos Sliders nos permitirán modificar la curvatura de cada tramo de cable de manera individual.

El rango de estos Sliders por defecto es de -3 a 3, pero si es necesario se puede modificar desde el Script en la instrucción “[Range(-3f,3f)]” escribiendo el valor que se necesite.

inspector para un componente de unity para generar cables
Fig. 8: Los parámetros de curvatura nos permiten ajustar la concavidad de cada tramo de cable.

Animación

En caso de necesitar animar el cable, agregué un bool llamado “isAnimatedWire”, al activarlo el cable se dibujará en cada ejecución de FixedUpdate que por defecto se ejecuta cada 20 mili segundos.

Resultado

Utilizando esta solución podremos dibujar, de manera automática, cables suspendidos desde dos o más puntos. Podemos agregar tantos puntos como queramos y modificar la curvatura de cada tramo de manera individual.

El cable se generado con el componente LineRenderer y utilizando expresiones matemáticas.

cables en unity con componente line renderer
Fig. 9: Al aumentar las subdivisiones se puede apreciar la curvatura del cable.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *