跳到主要内容
版本:2.2.x

常见问题

安装问题

问题: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引用丢失导致编译报错了

  1. 请在PlayerSetting里修改API Level为.NET 4.x或者.NET Framework
  2. 关闭游戏工程后,删除Assets同级目录下所有的csproj文件和sln文件。
  3. 删除Library/ScriptAssemblies文件夹。
  4. 重新打开游戏工程,然后点击某个脚本重新编译。

问题: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文件夹同级。

真机上运行时问题

问题:真机上的模型或材质球显示效果不对

  1. 确认是否收集过着色器变种,并且SVC文件参与打包。

  2. 尝试关闭Project Settings -> Player页面 Optimization栏的Optimize Mesh Data选项。

  3. 如果Unity3D是2020.3以上的版本,尝试使用SBP构建(可编程构建管线)。

  4. 确认着色器使用特性被测试真机硬件支持。

  5. 确认渲染组件代码未被引擎裁剪。

  6. 如果是粒子特效显示问题,请检测关联Mesh是否开启了可读写。

  7. 如果是光照贴图错误,请检测相关设置。

    例如:Lightmap Modes修改为Custom。

  8. 从错误日志或警告日志里找到蛛丝马迹。

问题:使用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种:

  1. 修改加载方式为异步方法。
  2. 加载之前先将相关资源全部下载到本地。