1)如何在FBX剔除Lit.shader依赖
2)Unity出AAB包(PlayAssetDelivery)模式下加载资源过慢问题
3)如何在URP中正确打出Shader变体
4)XLua打包Lua文件粒度问题
这是第371篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
UWA社区主页:community.uwa4d.com
UWA QQ群:465082844
Asset
Q:测试发现只能通过后处理才能去掉Lit.shader依赖,尝试使用AssetDatabase.LoadAssetAtPath(fbxPath)然后执行下面代码,并不能去掉依赖。请问还有什么其他办法吗?
protected void OnPostprocessModel(GameObject model) { var renderers = model.GetComponentsInChildren<Renderer>(); foreach (var renderer in renderers) { // 默认fbx会引用Lit.mat,会引起ab包冗余,导入时去掉 foreach (var material in renderer.sharedMaterials) { if (material != null && material.name == "Lit") { renderer.sharedMaterials = new Material[0]; } } } // 去掉fbx默认自带的材质球 ModelImporter importer = (ModelImporter)base.assetImporter; if (importer != null) { if (importer.materialImportMode != ModelImporterMaterialImportMode.None) { importer.materialImportMode = ModelImporterMaterialImportMode.None; importer.SaveAndReimport(); } } }
针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/65aa21893625c22cffcb1ddd
AssetBundle
Q:Unity出AAB包(PlayAssetDelivery)模式下加载资源过慢问题。
环境: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/**"
添加完成后打包后仍未解决。
A:解决办法:
https://www.cnblogs.com/wangle/p/15440176.html加载AssetBundle不使用官方的接口:
直接自己拼接出来路径进行加载即可:
assetPackFilePath:这个路径会变,所以我在资源包下载完毕后,根据资产包里肯定会存在的一个资产调用PlayAssetPackRequest.GetAssetLocation()获取AssetLocation对象,AssetLocation.Path是资产包的路径。
感谢题主白小白@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文件夹都不能解决,希望有经验的大佬能解答一下。
A:把URP自带的Shader用到的材质和变体集合放一起打一个包试试,我打HDRP也遇到过。
感谢萌呆瞎@UWA问答社区提供了回答
Lua
Q:目前项目中使用XLua,Lua文件一般是每个Lua文件都打一个AB包,还是所有Lua都打一个AB包里?直观感觉上每个Lua都单独打一个AB包比较方便热更新。
A1:打一个Bundle,然后发生过变化的Lua做一个单独的Patch Lua Bundle。加载Lua文件的时候先读Patch Lua Bundle再读Base包Bundle。
感谢zzzzT@UWA问答社区提供了回答
A2:一般都是打一个包,Lua代码不大但文件多,每个都打IO开销会更大。
感谢王林@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844