unity3d - example - unity draw line in game
¿Realmente es tan difícil dibujar líneas suaves en Unity? (3)
Puede obtener buenos resultados generando una malla a partir de un conjunto de puntos.
El algoritmo para esto es el siguiente:
- Tienes un conjunto de puntos, podría generarse con la curva de bezier.
- Para cada punto, tome un vector direccional al siguiente punto
v = (p2 - p1)
(marcado en azul) . Luego gire ese vector 90 gradosnormal = vy, -vx
marcado en rojo .
- Esto ilustra que usaremos cada normal desde la posición del punto. Ahora puede multiplicar este vector en ambas direcciones por el ancho deseado de la línea.
- Crea los vértices en esas posiciones.
- Agregue índices para formar triángulos. Será algo así como
[i, w/2 + i, w/2 + i + 1]
dondei
es el índice actual, yw
es la cantidad total de vértices.
- Crea los otros triángulos. De nuevo algo como
[i, w/2 * i + 1, i + 1]
- Y el resultado final. Puede agregar más puntos para que la línea sea más suave.
He intentado por un tiempo dibujar líneas suaves en Unity, pero con Line Renderer obtuve solo líneas irregulares con las esquinas no redondeadas, en particular cuando el ángulo de curvatura es realmente pequeño. Aumenté el valor de antialiasing en ajustes de calidad y probé diferentes materiales, pero nada cambió. También traté de crear una instancia de una esfera cada vez que se mueve el mouse, pero crea algunas lagunas entre las distintas esferas, en particular cuando el mouse avanza rápidamente. Sé que hay un complemento llamado Vectrosity para esto, pero hay una manera de lograr esto sin él.
Obtuve solo líneas dentadas con las esquinas no redondeadas, en particular cuando el ángulo de curvatura es realmente pequeño.
Esto fue un problema en Unity 5.4 y siguientes. Este problema se ha corregido en Unity 5.5 y posteriores después de que LineRenderer
se LineRenderer
por completo.
Todo lo que tiene que hacer es actualizar a Unity 5.5 o la versión anterior y este problema debería desaparecer.
Hay una nueva variable llamada LineRenderer.numCornerVertices
. Puede usar eso para establecer qué tan suave quiere que sea la línea. El valor de 5 parece estar bien para esto.
También hay otra variable nueva llamada LineRenderer.numCapVertices
que se puede usar para establecer qué tan uniforme debe ser el final de la línea.
Esta es una captura de pantalla que muestra entre 5.4 y 5.5 los cambios:
Tuve este problema con Unity 2017.2. Traté de cambiar mi configuración de AA al máximo para deshacerme de los jaggies de renderizado de línea. No funcionó y fue frustrante.
Mi solución fue resolver el problema de que MSAA se apagó en la cámara porque el procesamiento se pospuso. La cámara tiene una configuración para "usar la configuración de gráficos" que nunca debería haber sido un desastre, pero yo soy un principiante, no sé mucho. Cambié la configuración para "adelantar" y mi jaggies desapareció en la niebla.
Si fuera más trabajador, publicaría imágenes de antes y después.