Unity:在 UI 画布图像的着色器中访问精灵二级纹理
Posted
技术标签:
【中文标题】Unity:在 UI 画布图像的着色器中访问精灵二级纹理【英文标题】:Unity: access sprite secondary texture in shader for UI canvas image 【发布时间】:2021-02-01 10:50:30 【问题描述】:在 Unity 中,我有一个带有通常的 _MainTex
的 sprite 和一个附加的 _inner
纹理,在 sprite 编辑器中定义为辅助纹理。
在 shaderGraph 中,当我想访问用于 sprite 渲染器的材质的辅助纹理时,我只需在 Texture2D
属性中输入“ref”为 _inner
,就像一个魅力。
但是,当我尝试使用用于 UI 画布图像(游戏中 UI)的着色器对同一个精灵执行相同操作时,着色器似乎找不到辅助纹理(因此相同的着色器适用于我的 SpriteRenderer ,但不在我的 UI 图像渲染器上)。
我做错了吗?知道什么吗?
【问题讨论】:
能贴出着色器代码吗? 可以,不过是shadergraph生成的。前两个属性是:Properties [NoScaleOffset] _MainTex ("MainTexture", 2D) = "white" [NoScaleOffset] _inner ("Inner", 2D) = "white"
【参考方案1】:
我也遇到过类似的问题,不同的是我是从着色器图中制作一个不亮的着色器。 据我所知,问题是由主节点引起的。将主节点改为 sprite lit 或 sprite unlit,然后可以指定辅助着色器,否则不会。因此,如果您的 UI 着色器可以在 sprite lit 或 sprite unlit 节点上正常工作,您可以尝试一下。
Sprite Lit 和 Sprite Unlit 工作正常
编辑:
正如我在下面评论的那样,将次要纹理翻转回来。
我无法解释问题背后的原理,但无论如何它对我有用。
【讨论】:
我测试了一下,发现实际加载了二级纹理,但是已经正常翻转了,翻转回来就可以了。以上是关于Unity:在 UI 画布图像的着色器中访问精灵二级纹理的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D:画布上的 Sprite 渲染器与图像渲染器问题
在 Unity 5 中,为啥精灵表中的某些精灵在精灵中不可见,但在 UI 图像中可以正常工作?
Unity Shaders and Effects Cookbook (7-1) 在Surface Shader 中 访问 顶点颜色