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纹理的输出正确参与到最终的颜色计算中。
- 先在Unity Inspector面板中手动给材质的
内容的提问来源于stack exchange,提问作者Mike The Elf
相关产品推荐
相关产品推荐

