团结| mesh.colors不会为我的自定义网格物体着色

时间:2019-04-16 17:42:22

标签: unity3d mesh

我已经在Unity中建立了一个自定义金字塔,如下所示:

    Mesh mesh = GetComponent<MeshFilter>().mesh;
    mesh.Clear();
    Vector3[] vertices = {
        new Vector3(0.0f, 0.5f, 0.0f),
        new Vector3(0.5f, 0.0f, 0.5f),
        new Vector3(-0.5f, 0.0f, 0.5f),
        new Vector3(-0.5f, 0.0f, -0.5f),
        new Vector3(0.5f, 0.0f, -0.5f),
    };

    int[] triangles = {
        1, 2, 3,
        1, 3, 4,
        1, 0, 2,
        2, 0, 3,
        3, 0, 4,
        4, 0, 1
    };


    mesh.vertices = vertices;
    mesh.triangles = triangles;

我正在为金字塔着色,就像在统一文档中所说的那样:

    Color[] colors = new Color[vertices.Length];

    for (int i = 0; i < vertices.Length; i++)
        colors[i] = Color.Lerp(Color.red, Color.green, vertices[i].y);

    // assign the array of colors to the Mesh.
    mesh.colors = colors;

但这不会改变任何事情。

我没有任何对象,只有这个脚本。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

请注意,mesh.colors

中的注释
  

//(请注意,大多数内置的着色器不会显示顶点颜色。请使用诸如粒子着色器之类的颜色来查看顶点颜色)

因此,为了在MeshRenderer组件中看到这些颜色,请添加使用诸如“顶点”或“粒子着色器”的材料。

因此

    Project视图(资产)中
  1. 进行右键单击CreateMaterial

enter image description here

  1. 给该材料起个名字
  2. 从下拉菜单中为Shader查找并选择例如ParticlesStandard Unlit(或者如果您想接收闪电Standard Surface

enter image description here

  1. 最后将这种材料用于您的对象,方法是将其拖动到MeshRenderermaterial中,或者简单地将其拖动到Scene视图中的相应对象上(后者可能不起作用如果该对象还没有网格)

结果:

enter image description here

答案 1 :(得分:0)

除了https://stackoverflow.com/a/55714190/617889

使用通用渲染管线时,您需要使用其他着色器:

  • Univeral Render Pipeline \ Particles \ Lit(有闪电)
  • Univeral Render Pipeline \ Particles \ Unlit(无闪电)