关注

从Assetbundle加载的Shader变成了粉色

问题

  • 从AssetBundle加载的我的着色器/材质/模型成了粉色,缺失或失效
  • 未从AssetBundle加载的shader可正常工作 

原因

这可能有两个原因。例如这个里面的shader代码也许不能被目标平台支持。另一个原因可能是存储在Assetbundle中的shader没有被引用在构建的可执行包中。

解决方案 

AssetBundle需要按照正确的目标平台来创建,例如为iOS设备创建Bundles的代码如下: 

BuildPipeline.BuildAssetBundles("AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS);

Graphics Settings里需要保持Always Included Shaders列表在创建和加载Assetbundle时保持不变。Unity会检查Graphics Settings中的Always Included Shaders列表。如果一个着色器在这个列表里,AssetBundle只会保存该着色器的引用而不是平台相关的着色器代码。如果在Always Included Shaders列表删除该着色器,它将不会被包含在构建的目标平台中,这也会导致着色器丢失,因为AssetBundle仅包含着色器引用。

在构建AssetBundle时,目标平台的Player Settings中的图形API列表中应该包含所有需要的API。如果这个列表在构建和加载AssetBundle时发生改变,这时打包进AssetBundle中的shader代码将会对应到错误的API,结果导致shader在目标平台不支持。

更多信息 

当使用Unity工程构建AssetBundle然后用另一个Unity工程加载该AssetBundle时,这个问题可能因为两个工程有不同的Graphics API 列表或者Always Included Shaders 列表。

这篇文章有帮助吗?
2 人中有 2 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。