Unity自定义体素网格应用Mesh Color/Color32着色失效如何解决
问题解决方法
- 你给Mesh设置
colors属性的代码逻辑没有问题,颜色不生效的本质原因是:网格顶点色属于网格的自定义数据,必须配合**支持读取顶点色的着色器(Shader)**才能被渲染出来,Unity默认给新建MeshRenderer分配的材质不会读取顶点色,因此看不到你设置的红色。 - 你提到的「不希望通过材质的方式改色」可以实现:你只需要使用一个固定的、支持顶点色的材质即可,不需要手动修改材质的颜色参数,立方体的颜色完全由你写入Mesh的
colors属性控制,符合你的需求。
代码修改方案
你只需要把CreateQuad方法末尾注释的材质部分替换为以下代码即可:
// 创建使用内置支持顶点色Shader的材质,无需手动设置材质颜色,颜色完全读取网格顶点数据 Material vertexColorMat = new Material(Shader.Find("Legacy Shaders/Transparent/VertexLit")); // 如果使用URP管线,替换为下方Shader即可 // Material vertexColorMat = new Material(Shader.Find("Universal Render Pipeline/Unlit")); renderer.material = vertexColorMat;
可选优化建议
你当前的实现是给立方体的每个面都单独创建一个子对象和Mesh,可以优化为将6个面的顶点、法线、颜色、三角面数据合并为单个Mesh,直接挂载在World对象上,减少Draw Call,提升性能:
- 先声明全局的顶点、法线、颜色、三角面列表,每次创建面的时候把对应数据追加到列表里
- 全部面创建完成后,一次性把列表数据赋值给单个Mesh,添加到World对象的MeshFilter上即可
内容的提问来源于stack exchange,提问作者Norime
相关产品推荐
相关产品推荐

