Unity3d 如何统一渲染流线?

Unity3d 如何统一渲染流线?,unity3d,Unity3d,我想在统一中呈现流线。流线是许多空间曲线,每个顶点都有自己的颜色。如下图所示: Unity的LineRenderer似乎无法为各个节点指定颜色。那么我该怎么办呢?您可以使用或创建网格 直接从文件: …在某些情况下,您可能希望渲染由线或点组成的复杂对象。使用该拓扑创建网格并使用其进行渲染通常是最有效的方法 下面是一个创建线条带网格的脚本。把它放在一个空的游戏对象上。 网格如下所示: [RequireComponent(typeof(MeshFilter))] [RequiredComponen

我想在统一中呈现流线。流线是许多空间曲线,每个顶点都有自己的颜色。如下图所示:


Unity的LineRenderer似乎无法为各个节点指定颜色。那么我该怎么办呢?

您可以使用或创建网格

直接从文件:

…在某些情况下,您可能希望渲染由线或点组成的复杂对象。使用该拓扑创建网格并使用其进行渲染通常是最有效的方法

下面是一个创建线条带网格的脚本。把它放在一个空的游戏对象上。
网格如下所示:

[RequireComponent(typeof(MeshFilter))]
[RequiredComponent(typeof(MeshRenderer))]
公共类线条带:单行为{
void Start(){
GetComponent().material=新材质(Shader.Find(“精灵/默认”);
int n=512;
Vector3[]顶点=新的Vector3[n];
颜色[]颜色=新颜色[n];
int[]索引=新的int[n];
对于(int i=0;i
您可以使用或创建网格

直接从文件:

…在某些情况下,您可能希望渲染由线或点组成的复杂对象。使用该拓扑创建网格并使用其进行渲染通常是最有效的方法

下面是一个创建线条带网格的脚本。把它放在一个空的游戏对象上。
网格如下所示:

[RequireComponent(typeof(MeshFilter))]
[RequiredComponent(typeof(MeshRenderer))]
公共类线条带:单行为{
void Start(){
GetComponent().material=新材质(Shader.Find(“精灵/默认”);
int n=512;
Vector3[]顶点=新的Vector3[n];
颜色[]颜色=新颜色[n];
int[]索引=新的int[n];
对于(int i=0;i
Unity的LineRenderer似乎无法为单个节点分配颜色。
这时我开始使用多个LineRenderer(为每一条真实线使用一个列表?)或编写自己的LineRenderer扩展(或重新实现)。我没有尝试过做后者,所以我甚至不知道它是否有效(理论上你可以扩展Unity类,实际上你会遇到一些奇怪的错误)。
Unity的LineRenderer似乎无法为单个节点分配颜色。
从那时起,我就开始使用多个LineRenderer(为每一条真实的线使用一个列表?)或者编写我自己的LineRenderer扩展(或重新实现)。我没有试过做后者,所以我甚至不知道它是否有效(理论上你可以扩展Unity类,实际上你会遇到一些奇怪的错误)。很好。不知道存在网格拓扑线。不知道存在
MeshTopology.line
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class LineStrip : MonoBehaviour {

    void Start() {       
        GetComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default"));

        int n = 512;    
        Vector3[] verts = new Vector3[n];
        Color[] colors  = new Color[n];
        int[] indices = new int[n];

        for (int i = 0; i < n; i++)
        {
            // Indices in the verts array. First two indices form a line, 
            // and then each new index connects a new vertex to the existing line strip
            indices[i] = i;
            // Vertex colors
            colors [i] = Color.HSVToRGB( (float)i/n, 1, 1 );
            // Vertex positions
            verts[i] = new Vector3( i / 64f, Mathf.Sin( i/32f ), 0);
        }

        Mesh m = new Mesh
        {
            vertices = verts,
            colors = colors
        };

        m.SetIndices(indices, MeshTopology.LineStrip, 0, true);

        GetComponent<MeshFilter>().mesh = m;
    }   
}