Unity中使用GL画线时注意一个问题,材质设置pass的代码应该放在GL.Color后面。类似下面这样:
void RenderLine(DTGizmos gizmos)
{
if (!gizmos) return;
foreach (GizmosLine gizmosLine in gizmos.gizmosLines)
{
if (gizmosLine.verts.Length < 2) continue;
//
GL.Begin(GL.LINES);
//
GL.Color(gizmosLine.color);
//
foreach (Vector3 v in gizmosLine.verts)
{
GL.Vertex(v);
}
//
materialLine.SetPass(0);
//
GL.End();
}
}
如果是绘制基于屏幕的线条,而不是三维空间的线条,请老老实实把Vector3的z值设置为0,否则有可能画不出来。
GL.PushMatrix();
GL.LoadOrtho();
for (int i = 0; i < beziers.Length; i++)
{
float alpha = alphaTarget * beziers[i].alphaMulti;
if (Mathf.Approximately(alpha, 0) || alpha < 0) continue;
//
color.a = alpha;
mat.SetColor("_Color", color);
mat.SetPass(0);
Vector3[] points = beziers[i].GetPoints();
GL.Begin(GL.LINE_STRIP);
foreach (Vector3 p in points)
{
GL.Vertex(new Vector3(p.x, p.y, 0));//注意要把p.z归零再用
}
GL.End();
}
GL.PopMatrix();