常见问题
问题:在编辑器下,用离线模式或联机模式运行游戏,为什么游戏里的模型会变成紫色?
如果在打AssetBundle的时候,选定的构建目标是安卓。那么在windows操作系统下,编辑器的默认渲染模式为DX11,我们需要修改编辑器的渲染模式,可以通过UnityHub来修改启动项目的编辑器渲染模式,参考官方文档。
在Vulkan下打包的编辑器需要加个command -force-vulkan
windows平台添加命令: -force-gles
问题:真机上的模型或材质球显示效果不对
- 确认是否收集过着色器变种,并且SVC文件参与打包。
- 尝试关闭Project Settings -> Player页面 Optimization栏的Optimize Mesh Data选项。
- 如果Unity3D是2020.3以上的版本,尝试使用SBP构建(可编程构建管线)。
- 确认着色器使用特性被测试真机硬件支持。
- 确认渲染组件代码未被引擎裁剪。
- 如果是粒子特效显示问题,请检测关联Mesh是否开启了可读写。
- 如果是光照贴图错误,请检测相关设置。
- 从错误日志或警告日志里找到蛛丝马迹。
问题:编辑器下测试增量打包,显示下载数量为0
以太空战机为测试工程,我先构建了初始版本100,接着把资源文件拷贝到了资源服务器。
然后我修改了一些文件来测试更新,打包版本为101,接着把资源文件拷贝覆盖到了资源服务器。
运行编辑器观察到了关键日志:最后提示下载提示的资源数量为0
资源包初始化成功!当前资源版本:100
已获取到最新版本号:101
需要下载的资源数量:0
一种情况是:
这是因为首次构建的时候,资源包构建界面里Copy Buidin File Option选项为Clear And Copy All。后面构建的时候,该选项没有变动,导致编辑器下的StreamingAssets目录下包含了最新的所有资源包。
一种情况是:
实现IQueryServices的类,查询方法总是返回true。可以使用太空战机的查询类。
YooAsset在检查更新的时候,会首先检查内置资源目录里是否存在,然后检查沙盒目录里是否存在,如果都不存在,就认为需要下载。
注意:编辑器下的沙盒目录存放在游戏工程内,和Library文件夹同级。
问题:Unity2021编辑器运行游戏提示YooAssets is initialized !
尝试关闭:Project Setting ---> Editor ---> Enter Play Mode Options
问题:YooAsset的DLL引用丢失导致编译报错了
- 请在PlayerSetting里修改API Level为.NET 4.x或者.NET Framework
- 关闭游戏工程后,删除Assets同级目录下所有的csproj文件和sln文件。
- 删除Library/ScriptAssemblies文件夹。
- 重新打开游戏工程,然后点击某个脚本重新编译。
问题:UnityEditor.Build.Pipeline引用丢失问题
YooAsset依赖于ScriptBuildPipeline(SBP),在PackageManager里找到SBP插件安装就可以了。
问题:资源收集器界面打开为什么是空的
首先看下编辑器控制台里是否有报错信息,如果没有报错信息,可以尝试升级一下Unity编辑器的小版本,例如:我的Unity编辑器是2019.3.11,在升级到2019.3.40+版本就解决了。另外尽量选择LTS版本,例如:unity2019.3.x unity2020.3.x unity2021.3.x
问题:使用FileZilla等FTP上传工具后,文件下载总是验证失败
把传输类型修改为二进制就可以了。
问题:打包的时候报错:Cannot mark assets and scenes in one AssetBundle. AssetBundle name is "assets_xxxx_scenes.bundle
Unity引擎不允许把场景文件和其它资源文件一起打包。
问题:WebGL平台运行时报错:Failed to decompress data for the AssetBundle.
WebGL平台不支持资源文件加密。在构建选项里,可以将加密方法设置为空
问题:真机上报错提示:The AssetBundle '__data' can't be loaded because another AssetBundle with the same files is already loaded.
一般出现这种报错是因为游戏里存在多个package资源包,解决办法是在AssetBundleCollector界面,把Unique Bundle Name勾选上即可。
问题:有个别手机每次启动执行YooAsset初始化,都执行了有8秒钟,其它手机倒是没事。
检查下手机沙盒内容是否存储在SD卡里。
问题:太空战机DEMO报错:Exception:AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='CheckAssetExist'
可以搜索相关源代码:StreamingAssetsHelper2.cs
该脚本主要作用是在安卓平台下构建APK的时候,自动注入一段代码。该段代码的作用是用于查询StreamingAssets文件夹内是否包括某个文件。如果提示错误说明注入失败了,需要自己排查原因。
问题:运行时报错提示:Failed to mapping location to asset path : xxxxxx
该错误提示资源加载定位地址映射到资源路径失败,YooAsset支持2种资源定位模式。
如果在AssetBundle Collector窗口勾选了Enable Addressable选项,那么就是资源加载时填写的可寻址地址无效。
注意:资源定位地址对大小写敏感!
package.LoadAssetAsync("scene_login");
如果没有启用可寻址模式,那么就是资源加载时填写的资源全路径无效。
package.LoadAssetAsync("Assets/Scenes/scene_login");
package.LoadAssetAsync("Assets/Scenes/scene_login.unity");
如果以上还没能解决问题,可以在编辑器下启用Eidtor Play Mode进行断点调试
var package = YooAssets.GetPackage("PackageName");
package.CheckLocationValid("location"); //断点位置,跟踪进去
问题:运行时报错提示:WaitForAsyncComplete failed ! Try load bundle : xxxxxx from remote with sync load method !
该错误提示开发者使用同步方法加载本地不存在的资源(该资源需要更新下载)。
解决方案有2种:
- 修改加载方式为异步方法。
- 加载之前先将相关资源全部下载到本地。
问题:YooAsset支持Unity2018吗
YooAsset分俩部分,编辑器代码和运行时代码。因为工具界面是使用UIElements编写的,所以在Unity2019以前的版本是使用不了界面化工具。但是这并没有影响我们使用YooAsset,以下提供一种解决方案。
请先通过Package Manager安装Scriptable Build Pipeline插件。
- 资源包收集工具替代方案
// 推荐直接手动编辑资源收集配置文件,在Sample工程里可以找到AssetBundleCollectorConfig.xml的文件,我们直接拿过来做模板。
// 然后通过以下代码来导入配置文件,成功之后AssetBundleCollectorSetting.asset文件会被刷新,就可以运行游戏了。
// 注意:每次修改完XML文件,都需要导入配置文件。
AssetBundleCollectorConfig.ImportXmlConfig("C://Demo//Assets//AssetBundleCollectorConfig.xml");
- 资源包构建工具替代方案
// 资源包构建可以直接参考教程文档,在文档的最下面有Jenkins支持介绍。
- 资源包报告工具替代方案
// 我们可以使用Unity2019或更高版本来创建一个包含YooAsset的工程查看构建报告。
- 资源包调试工具替代方案
// YooAsset支持真机远程调试,我们可以使用Unity2019或更高版本来创建一个包含YooAsset的工程调试。
// 如果想在编辑器下调试,可以仿照编写一个调试界面。