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

2D游戏运行时更换Sprite次要纹理(_Shoes)失败求助

问题排查与解决方向
  • 核对Shader Graph属性的引用名称
    确保Shader Graph中_Shoes纹理属性的引用名称和代码里的_Shoes完全一致(包括大小写、下划线)。Shader的属性名是区分大小写的,哪怕差一个字符都可能导致设置失效——你提到程序能识别属性,但再仔细检查一次Shader Graph里的属性设置面板,确认引用名没有拼写错误。

  • 检查材质实例的修改方式
    避免直接多次访问renderer.material(每次访问都会生成新的材质实例),建议先缓存材质实例再修改:

    Material targetMat = renderer.material;
    targetMat.SetTexture("_Shoes", texture2D);
    // 如果确实需要启用关键词再执行下面一行
    targetMat.EnableKeyword("_SHOES");
    

    如果你想修改共享材质(所有使用该材质的物体同步变化),可以改用renderer.sharedMaterial。

  • 验证Shader Graph的逻辑关联

    • 确认_SHOES关键词和_Shoes纹理的显示逻辑是绑定的:比如是不是用了Shader Graph的Keyword节点来控制纹理是否参与混合。如果没有这个关联逻辑,EnableKeyword完全是多余的,直接设置纹理即可。
    • 检查Shader Graph中的纹理混合逻辑:比如_Shoes纹理的透明度是否为0、是否被其他纹理完全覆盖,或者混合模式设置错误(比如用了Replace模式但纹理alpha通道有问题)。
  • 确认Sprite与材质的绑定关系

    • 检查Sprite的渲染设置:确保Sprite使用的是你基于Shader Graph生成的自定义材质,而不是Unity默认的Sprite Shader。
    • 核对Sprite编辑器里的次要纹理槽,确认_Shoes槽对应的是Shader中_Shoes属性,而不是其他纹理属性。
  • 基础调试验证

    • 先在Unity Inspector面板中手动给材质的_Shoes属性赋值靴子纹理,如果手动赋值后能正常显示,说明问题出在代码上:检查texture2D是否为null、代码执行时机是否正确(比如在Awake时纹理还未加载完成)。
    • 如果手动赋值也不生效,那问题肯定在Shader Graph的逻辑上,重新梳理纹理混合的节点连接,确保_Shoes纹理的输出正确参与到最终的颜色计算中。

内容的提问来源于stack exchange,提问作者Mike The Elf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:07:28