You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D中LineRenderer打包后不显示问题求助

解决Unity打包后LineRenderer圆形消失的问题

这问题我之前也碰到过!核心原因就是你动态用Shader.Find加载的Mobile/Particles/Additive Shader在打包时被Unity自动剔除了——Unity会默认移除它检测不到引用的资源,而通过代码字符串查找的Shader很容易被当成「无用资源」删掉,所以才会报Value cannot be null. Parameter name: shader的错误。

下面给你三个靠谱的解决办法,按推荐程度排序:

方法1:使用Shader预加载列表(最推荐)

不需要移动任何资源,直接告诉Unity要保留这个Shader:

  • 打开Unity编辑器的 Edit > Project Settings > Graphics 面板
  • 找到「Preloaded Shaders」区域,点击「+」按钮
  • 在弹出的资源选择窗口里找到Mobile/Particles/Additive Shader并添加进去
  • 重新打包项目,Unity会确保这个Shader被包含在构建包中

方法2:直接在脚本中引用Shader(最直观)

通过编辑器赋值的方式让Unity明确识别资源引用:

  1. 在你的脚本里添加一个公开的Shader字段:
public Shader circleShader;
  1. 回到Unity编辑器,把Mobile/Particles/Additive Shader拖到这个脚本组件的circleShader字段上
  2. 修改创建Material的代码,直接用这个引用:
// 替换原来的Shader.Find相关代码
lineRenderer.material = new Material(circleShader);

这种方式Unity会自动跟踪资源引用,打包时绝对不会漏掉。

方法3:把Shader放到Resources文件夹

通过Resources目录强制Unity包含资源:

  • 在项目中创建一个名为Resources的文件夹(如果还没有的话)
  • 把Mobile/Particles/Additive Shader复制到这个文件夹里(可以保留原路径结构)
  • 修改代码中的Shader加载逻辑:
// 替换原来的Shader.Find行
Shader circleShader = Resources.Load<Shader>("Mobile/Particles/Additive");
if (circleShader != null)
{
    lineRenderer.material = new Material(circleShader);
}
else
{
    Debug.LogError("无法加载圆形所需的Shader,请检查Resources路径是否正确!");
}

注意:Resources文件夹里的资源会被全部打包,所以不要放太多无关资源,避免包体膨胀。

另外提个小建议:以后动态加载资源时,尽量避免只用字符串查找的方式,最好通过编辑器赋值或者预加载列表来确保资源被正确包含,不然很容易踩打包丢失资源的坑。

内容的提问来源于stack exchange,提问作者Scipion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:06:28