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 图像中可以正常工作?

片段着色器中的OpenGL点精灵旋转

Unity小功能开发实战教程在UI画布上画网格线

Unity Shaders and Effects Cookbook (7-1) 在Surface Shader 中 访问 顶点颜色

unity_UI相关