unity3d - 为什么着色器不包括构建?
问题描述
我是 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")
。
问题是 - 有没有更直接的方法在构建中包含着色器?为什么我需要创建虚拟对象才能将此文件包含在构建中?还是我错过了什么?
解决方案
您必须在 图形设置中将所有着色器添加到 Unity 的“始终包含的着色器”列表中。
推荐阅读
- xpath - XPath for xquery 在每个元素上应用 where 子句
- facebook-messenger - Facebook Messenger 聊天机器人身份验证
- java - 如何在 http 标头中发送西里尔文/完成字符
- javascript - 即使 EJS 模板工作正常,也无法读取 null 的属性
- javascript - 在 node-red 中访问 msg 的值
- javascript - 无法读取 null 的属性“暂停”
- android-studio - Android Studio v 3.5.2 中的选项“build”(apk)在哪里?
- itext - 在fabric js 1.7.22版中减小宽度时如何自动换行?
- jquery - 平滑滑块的缓慢淡出效果
- javascript - 以角度 8 显示流文件