首页 > 解决方案 > 为什么着色器不包括构建?

问题描述

我是 Unity 的新手,我觉得有些东西很奇怪。我创建了一个UnlitTextureYUV.shader文件,然后像这样在我的脚本中使用它

...
meshRenderer.material = new Material(Shader.Find("UnlitTextureYUV"));
...

然后在编辑器中单击运行按钮,我看到一切正常,好的。然后我单击File->Build&Run并收到一个错误ArgumentNullException,这意味着未找到着色器。

我试图找出发生了什么,并在 Unity 社区找到了这样的答案

https://answers.unity.com/questions/1147277/textures-from-local-works-in-editor-missing-in-bui.html

据我了解,为了在动态构建中使用着色器,我需要创建虚拟材质为其添加纹理,甚至创建虚拟对象(禁用)并将此材质添加到该对象。按照这个顺序,我的着色器将包含在构建中,我将能够通过调用此方法在代码中动态地找到它 Shader.Find("UnlitTextureYUV")

问题是 - 有没有更直接的方法在构建中包含着色器?为什么我需要创建虚拟对象才能将此文件包含在构建中?还是我错过了什么?

标签: unity3d

解决方案


您必须在 图形设置中将所有着色器添加到 Unity 的“始终包含的着色器”列表中。


推荐阅读