Dos formas de dibujar líneas#
- Trail Renderer: deja una estela detrás de un objeto en movimiento (la cola de un cohete, el corte de una espada, un dash). Tú mueves el objeto; el rastro se genera solo.
- Line Renderer: dibuja una línea entre puntos que tú defines (un láser, una cuerda, la trayectoria de un proyectil, una zona de peligro).
Ambos usan un material y una curva de anchura/color a lo largo de la línea.
Trail Renderer: estelas#
Añádelo al objeto que se mueve. Ajustes clave:
- Time: cuántos segundos vive cada tramo de la estela (más = cola más larga).
- Width: curva de grosor del principio (pegado al objeto) al final (desvanecido).
- Color: gradiente, normalmente con el alpha bajando a 0 al final para que se difumine.
- Material: un material additive o unlit suele dar el look de energía.
using UnityEngine;
[RequireComponent(typeof(TrailRenderer))]
public class EstelaDash : MonoBehaviour
{
private TrailRenderer trail;
void Awake() => trail = GetComponent<TrailRenderer>();
// Enciende la estela solo durante el dash
public void Dash(bool activo) => trail.emitting = activo;
}Deja emitting = false y actívala en el momento clave (dash, golpe). Una estela siempre encendida se ve sucia y cuesta más. También puedes trail.Clear() para borrarla de golpe (útil al teletransportar, o el rastro cruzará la pantalla).
Line Renderer: líneas explícitas#
Le das los puntos y dibuja la línea:
using UnityEngine;
[RequireComponent(typeof(LineRenderer))]
public class Laser : MonoBehaviour
{
[SerializeField] private float alcance = 20f;
private LineRenderer line;
void Awake() { line = GetComponent<LineRenderer>(); line.positionCount = 2; }
void Update()
{
Vector3 origen = transform.position;
Vector3 fin = origen + transform.forward * alcance;
// Si el láser choca, acorta hasta el impacto
if (Physics.Raycast(origen, transform.forward, out RaycastHit hit, alcance))
fin = hit.point;
line.SetPosition(0, origen);
line.SetPosition(1, fin);
}
}Para una trayectoria curva (la parábola de una granada), sube positionCount a muchos puntos y ve calculando cada posición con las matemáticas del movimiento.
El Line Renderer vive en el mundo 3D (proyectiles, láseres). Para líneas en la interfaz (conectar nodos en un menú), no uses Line Renderer: usa soluciones de UI. Y para el espacio local (una cuerda pegada al objeto), activa Use World Space = false.
Rendimiento#
Cada Trail/Line Renderer genera geometría cada fotograma. Decenas de láseres con cientos de puntos, o estelas con Time alto sobre muchos objetos, suman draw calls y triángulos. Limita positionCount, reutilízalos con object pooling y apaga las estelas cuando no se ven. Ver reducir draw calls.
Errores frecuentes#
- Estela siempre encendida (se ve sucia y cuesta): actívala en el momento y usa
Clear()al teletransportar. - Line Renderer con material en magenta: shader incompatible con URP.
- Olvidar fijar
positionCountantes deSetPosition(no aparece nada). - Usar Line Renderer para UI (vive en el mundo, no en el Canvas).
- Curvas con muchísimos puntos por fotograma sin necesidad (coste inútil).
Ponte a prueba#
Resumen#
El Trail Renderer deja estelas tras un objeto en movimiento (espadas, dashes, cohetes): controla Time, Width y color, y enciéndelo (emitting) solo cuando toca. El Line Renderer dibuja líneas entre puntos que defines (láseres, cuerdas, trayectorias): fija positionCount y coloca las posiciones, acortando con un raycast si choca. Ambos generan geometría cada fotograma: vigila los puntos y el número de instancias. Para efectos más ricos, combínalos con el Particle System.