问题
- 从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 列表。
评论
0 条评论
文章评论已关闭。