You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:07