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.
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.
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.
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.
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.
En la figura 6 vemos que el cable se ha cerrado.
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.
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.
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.