Unity出AAB包资源加载过慢

文章讨论了Unity中关于AAB包资源加载速度、IL2CPP打包中缺失Mono接口、如何在URP中正确处理Shader变体以及XLua打包Lua文件的粒度选择,寻求社区解决方案。
摘要由CSDN通过智能技术生成

1)Unity出AAB包资源加载过慢
2)Unity IL2CPP打包,libil2cpp.so库中没有Mono接口
3)如何在URP中正确打出Shader变体
4)XLua打包Lua文件粒度问题


这是第370篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

AssetBundle

Q:环境:Unity 2021.3.32f1 ,Google工具使用的是com.google.play.assetdelivery-1.7.0版本。

1. 使用PlayAssetDelivery自定义模式下把AssetBundle分成了3个包:InstallTimePack(840mb)、FastFollowPack(430mb)、OnDemand(100mb)。

2. 打包完后使用7z压缩工具查看包体发现资源被进行了压缩。

3. 尝试在mainTemplate.gradle和launcherTemplate.gradle的AaptOptions中的noCompress中添加assetbundle的后缀(.ab),未解决问题。

4. 在Google打包工具中发现BundleToolHelper中可以添加未压缩匹配字符列表,进行添加:

"assets/**/*.ab","**/*.ab","assets/**"

添加完成后打包后仍未解决。

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


IL2CPP

Q:项目接入UWA需要分析Mono的性能,然后UWA SDK要通过Mono接口获取数据;但是发现il2cpp.so库中没有相关接口,如图(图为其他包中的Mono接口,非项目包):

项目接入了HybridCLR,最开始怀疑是这里有问题,但是与UWA沟通过,确认其他公司使用HybridCLR是没问题的;试过把HybridCLR剔除,也都没用。

项目export project的工程,unityLibrary\src\main\Il2CppOutputProject也没发现什么异常,网上也没发现什么资料。

build.gradle内容也未做修改。

现在希望IL2CPP能够正常含有Mono接口,有大佬知道是为什么嘛?(有怀疑是IL2CPP的问题,但是又说其余公司没问题,这就很迷惑了)。

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


Shader

Q:现在将项目中使用的所有Shader打到一个AssetBundle里,svc收集材质用到的变体。但是在打包时发现一些URP官方的keyword丢失了,例如我在PipelineRenderer里开启了forward+,在Shader里定义了forward+相关keyword,那么应该在打包时会有这个keyword,但通过调试发现在OnProcessShader接口获取到的所有变体里都没有_FORWARD_PLUS这个keyword。但是如果完整打一个win64的包,却不会丢失这个keyword。

现在希望每次修改Pipeline文件的功能(例如开启forward+、开启主光阴影)时,将所有Shader打到一个AB包,都不会丢失这些依赖Pipeline功能的keyword(_FORWARD_PLUS、_MAIN_LIGHT_SHADOWS),请问正确的做法是怎样?

我自己测试了很久,也在网上找搜索过,或是删除Library/ShaderCache文件夹都不能解决,希望有经验的大佬能解答一下。

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


Lua

Q:目前项目中使用XLua,Lua文件一般来讲是每个Lua文件都打一个AB包还是所有Lua都打一个AB包里,直观感觉上每个Lua都单独打一个AB包比较方便热更新。

A:我是所有的打一个AB包,才200KB大小,热更就更一个Bundle就可以。

感谢ccc@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity商业游戏底层资源加载框架的相关源码可以通过Unity官方提供的AssetBundle类来实现。AssetBundle类是Unity中用于打加载资源的类,它可以将游戏中的各种资源(例如场景、模型、纹理、音频等)打为一个个独立的AssetBundle文件,然后在运行时动态加载这些文件。 以下是实现资源加载的简单示例代码: ```csharp using UnityEngine; public class ResourceManager : MonoBehaviour { // 资源加载路径 public string bundleURL; // 资源名称 public string assetName; // 加载完成后的资源对象 private GameObject loadedAsset; void Start() { // 启动异步加载资源的协程 StartCoroutine(LoadAssetBundle()); } // 异步加载资源的协程 IEnumerator LoadAssetBundle() { // 使用UnityWebRequest从指定URL加载AssetBundle文件 using (var request = UnityEngine.Networking.UnityWebRequestAssetBundle.GetAssetBundle(bundleURL)) { yield return request.SendWebRequest(); // 加载AssetBundle文件 var bundle = DownloadHandlerAssetBundle.GetContent(request); // 从AssetBundle中异步加载资源 var assetRequest = bundle.LoadAssetAsync<GameObject>(assetName); yield return assetRequest; // 获取加载完成的资源对象 loadedAsset = assetRequest.asset as GameObject; } // 使用加载完成的资源对象进行后续操作 if (loadedAsset != null) { Instantiate(loadedAsset, transform.position, Quaternion.identity); } } } ``` 以上代码在Start方法中启动了一个协程,通过UnityWebRequest异步地从指定URL加载AssetBundle文件,然后使用AssetBundle.LoadAssetAsync异步地加载指定名称的资源,最后获取加载完成的资源对象进行后续操作。 注意:上述代码仅为示例,具体的资源加载逻辑和流程可能因项目需求而异,需要根据实际情况进行相应的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值