常见问题
安装问题
问题:SBPBuildTask.cs脚本编译报错的问题
YooAsset依赖于ScriptBuildPipeline(SBP)的较新版本:2.1.x版本。
如果没有通过PackageManager来安装YooAsset,那么依赖的SBP库不会自动安装到本地。通过PackageManager来安装SBP库,如果没有匹配到2.1.x版本,可以先导入最新版本。然后找到工程目录下的Packages文件夹(Library文件夹同级目录),修改manifest.json文件。
"com.unity.scriptablebuildpipeline": "2.1.3", //更高的版本也可以
问题:团结引擎安装YooAsset的时候提示:Package [com.unity.scriptablebuildpipeline@2.1.3] cannot be foud
找到YooAsset插件目录下的package.json文件,修改dependencies依赖的SBP库的版本
{
"dependencies":
{
"com.unity.scriptablebuildpipeline": "2.1.3", //修改为团结引擎支持的版本!
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0"
}
}
问题:UnityEditor.Build.Pipeline引用丢失问题
YooAsset依赖于ScriptBuildPipeline(SBP),在PackageManager里找到SBP库安装就可以了。
问题:Unity2022编辑器下升级完YooAsset后配置总是丢失
可以先将YooAsset移除了。然后重启Unity之后重新安装YooAsset
问题:资源收集器界面打开为什么是空的
首先看下编辑器控制台里是否有报错信息,如果没有报错信息,可以尝试升级一下Unity编辑器的小版本,例如:我的Unity编辑器是2019.3.11,在升级到2019.3.40+版本就解决了。另外尽量选择LTS版本,例如:unity2019.3.x unity2020.3.x unity2021.3.x
问题:YooAsset的DLL引用丢失导致编译报错了
- 请在PlayerSetting里修改API Level为.NET 4.x或者.NET Framework
- 关闭游戏工程后,删除Assets同级目录下所有的csproj文件和sln文件。
- 删除Library/ScriptAssemblies文件夹。
- 重新打开游戏工程,然后点击某个脚本重新编译。
问题:YooAsset支持Unity2018吗
YooAsset分俩部分,编辑器代码和运行时代码。因为工具界面是使用UIElements编写的,所以在Unity2019以前的版本是使用不了界面化工具。但是这并没有影响我们使用YooAsset运行时库。
打包问题
问题:打包的时候报错:Cannot mark assets and scenes in one AssetBundle. AssetBundle name is "assets_xxxx_scenes.bundle
Unity引擎不允许把场景文件和其它资源文件一起打包。
编辑器下运行时问题
问题:在编辑器下,用离线模式或联机模式运行游戏,为什么游戏里的模型会变成紫色?
如果在打AssetBundle的时候,选定的构建目标是安卓。那么在windows操作系统下,编辑器的默认渲染模式为DX11,我们需要修改编辑器的渲染模式,可以通过UnityHub来修改启动项目的编辑器渲染模式,参考官方文档。
在Vulkan下打包的编辑器需要加个command -force-vulkan
windows平台添加命令: -force-gles
问题:Unity2021编辑器运行游戏提示YooAssets is initialized !
尝试关闭:Project Setting ---> Editor ---> Enter Play Mode Options
问题:编辑器下运行时报错提示:Exception: Can not found active package manifest
请确认一下初始化流程成功执行之后,再去调用相关的加载或者下载方法!
private IEnumerator InitPackage()
{
//(本段为伪代码,以下代码参数已经全部省略!)
// 需要保证下面三步成功执行
// 1. 初始化包裹
var operation = package.InitializeAsync();
yield return operation;
if (operation.Status != EOperationStatus.Succeed)
yield break;
// 2. 请求资源清单的版本信息
var operation =package.RequestPackageVersionAsync();
yield return operation;
if (operation.Status != EOperationStatus.Succeed)
yield break;
// 3. 传入的版本信息更新资源清单
var operation =package.UpdatePackageManifestAsync();
yield return operation;
if (operation.Status != EOperationStatus.Succeed)
yield break;
}
问题:编辑器下运行时报错提示:Exception: Can not found package version file
在编辑器下运行HostPlayMode模式的时候,会提示你本地找不到清单的版本文件。
这是因为初始化创建Package的时候,指定了内置文件系统的初始化参数。
如果本地没有任何内置资源文件(首包文件),可以尝试将内置文件系统的初始化参数类设置为NULL。
private IEnumerator InitPackage()
{
var createParameters = new HostPlayModeParameters();
createParameters.BuildinFileSystemParameters = null; //设置为NULL解决报错!
createParameters.CacheFileSystemParameters = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
initializationOperation = package.InitializeAsync(createParameters);
yield return initializationOperation;
}
问题:编辑器下运行时报错提示:Failed to load catalog file :yoo/DefaultPackage/BuildinCatalog
解决方案同上!
问题:编辑器下测试增量打包,显示下载数量为0
以太空战机为测试工程,我先构建了初始版本100,接着把资源文件拷贝到了资源服务器。
然后我修改了一些文件来测试更新,打包版本为101,接着把资源文件拷贝覆盖到了资源服务器。
运行编辑器观察到了关键日志:最后提示下载提示的资源数量为0
资源包初始化成功!当前资源版本:100
已获取到最新版本号:101
需要下载的资源数量:0
这是因为首次构建的时候,资源包构建界面里Copy Buidin File Option选项为Clear And Copy All。后面构建的时候,该选项没有变动,导致编辑器下的StreamingAssets目录下包含了最新的所有资源包。
YooAsset在检查更新的时候,会首先检查内置资源目录里是否存在,然后检查沙盒目录里是否存在,如果都不存在,就认为需要下载。
注意:编辑器下的沙盒目录存放在游戏工程内,和Library文件夹同级。
真机上运行时问题
问题:真机上的模型或材质球显示效果不对
确认是否收集过着色器变种,并且SVC文件参与打包。
尝试关闭Project Settings -> Player页面 Optimization栏的Optimize Mesh Data选项。
如果Unity3D是2020.3以上的版本,尝试使用SBP构建(可编程构建管线)。
确认着色器使用特性被测试真机硬件支持。
确认渲染组件代码未被引擎裁剪。
如果是粒子特效显示问题,请检测关联Mesh是否开启了可读写。
如果是光照贴图错误,请检测相关设置。
例如:Lightmap Modes修改为Custom。
从错误日志或警告日志里找到蛛丝马迹。
问题:使用FileZilla等FTP上传工具后,文件下载总是验证失败
把传输类型修改为二进制就可以了。
问题:WebGL平台运行时报错:Failed to decompress data for the AssetBundle.
WebGL平台不支持资源文件加密。在构建选项里,可以将加密方法设置为空
问题:WebGL平台运行时报错:Cannot create FMOD::Sound instance for clip
在编辑器下,切换为WebGL平台,然后以WebPlayMode模式运行游戏会报上面音频播放失败的错误。这个问题是引擎的问题,需要在网页上运行就正常了。
问题:真机上报错提示: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卡里。
问题:运行时报错提示: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种:
- 修改加载方式为异步方法。
- 加载之前先将相关资源全部下载到本地。