首页 > 解决方案 > Unity - 更改顶点颜色

问题描述

我在更新回调中有以下代码

    Mesh m = GetComponent<MeshFilter>().sharedMesh;
    Color[] newColors = new Color[m.vertices.Length];
    for (int vertexIndex = 0; vertexIndex < newColors.Length; vertexIndex++)
    {
        newColors[vertexIndex] = new Color(Random.value, Random.value, Random.value, 1.0f);

    }
    m.colors = newColors;

在场景中,我有 3D 游戏对象作为球体,我在玩场景时看不到颜色有任何变化。请建议

输出是

在此处输入图像描述

标签: unity3d

解决方案


你的代码很好。

大多数内置着色器不显示顶点颜色,因此您必须使用“粒子”着色器之一,或修改/创建自己的着色器。

而已。

.

有什么不对劲,对吧?:D

粒子着色器在 Sphere 等 3D 网格上看起来很糟糕,因为它的 Alpha 层渲染很差。

您必须创建第二个较小的对象,并分配一些东西来阻止/隐藏主要对象内的空白空间。

例如:

Shader "Custom/VertexLitBlendedWithZ" {
Properties {
    _EmisColor ("Emissive Color", Color) = (.2,.2,.2,0)
    _MainTex ("Particle Texture", 2D) = "white" {}
}

Category {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
    Blend SrcAlpha OneMinusSrcAlpha
    Cull Off ZWrite On Fog { Color (0,0,0,0) }

    Lighting On
    Material { Emission [_EmisColor] }
    ColorMaterial AmbientAndDiffuse

    SubShader {
        Pass {
            SetTexture [_MainTex] {
                combine texture * primary
            }
        }

    }
}
}

现在一切都按原样呈现。


推荐阅读