Unity中通过代码生成黑色纹理并赋予材质未生效问题求助
Unity生成黑色纹理未生效的排查与解决
以下是几个可能导致纹理未成功应用的原因及对应解决方法:
材质属性赋值方式错误
Unity标准Shader的Albedo纹理对应的属性名是_MainTex,直接使用mainTexture赋值在部分场景下可能不生效(比如材质使用自定义Shader或ShaderGraph时)。建议替换为显式指定属性的赋值方式:dotMaterial.SetTexture("_MainTex", dotTexture);可以在材质Inspector面板的Shader属性区,查看Albedo纹理对应的属性名,确保和代码中使用的一致。
纹理未正确配置读写权限
创建Texture2D时默认设置可能未开启读写权限,导致像素修改操作无效。可以在创建时指定参数,或补充配置:// 创建时指定格式与参数,确保支持读写 dotTexture = new Texture2D(800, 600, TextureFormat.RGBA32, false); dotTexture.filterMode = FilterMode.Point; dotTexture.wrapMode = TextureWrapMode.Clamp; // 开启读写权限并避免资源被自动清理 dotTexture.hideFlags = HideFlags.HideAndDontSave; Color[] colors = dotTexture.GetPixels(); for (int i = 0; i < colors.Length; i++) colors[i] = Color.black; dotTexture.SetPixels(colors); // 必须调用Apply()提交像素数据到GPU dotTexture.Apply();未实例化材质资源
如果dotMaterial直接引用的是Project面板中的原始材质资源,修改会直接改动原始文件,可能因资源锁定或编辑器未刷新导致不显示。需要先实例化材质再修改:// 假设originalMaterial是你引用的原始材质资源 dotMaterial = new Material(originalMaterial); dotMaterial.SetTexture("_MainTex", dotTexture);渲染相关的其他问题
- 检查使用该材质的对象,其MeshRenderer组件是否启用,且材质被正确添加到Materials数组中;
- 确认对象所在的渲染层级没有被遮挡,材质的RenderQueue设置符合需求;
- 部分平台对纹理尺寸有要求(如必须是2的幂次),可以尝试将纹理尺寸改为512x512这类2幂次数值测试。
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

