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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:38:16