如何在FBX剔除Lit.shader依赖

1)如何在FBX剔除Lit.shader依赖
2)Unity出AAB包(PlayAssetDelivery)模式下加载资源过慢问题
3)如何在URP中正确打出Shader变体
4)XLua打包Lua文件粒度问题


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

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();
            }
        }
    }
`

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


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

相关推荐
通明湖2 天前
NJet深层清理Lua代码
nginx·lua
大飞pkz2 天前
【Lua】题目小练14
开发语言·lua·练习·题目·题目小练
cxyll12342 天前
postman 用于接口测试,举例
开发语言·lua·接口测试·postman
寻水的鱼、、3 天前
【Unity Shader学习笔记】(二)图形显示系统
unity·shader
鱼鱼说测试3 天前
postman带Token测试接口
开发语言·lua
一行•坚书3 天前
怎么用redis lua脚本实现各分布式锁?Redisson各分布式锁怎么实现的?
redis·分布式·lua
你我约定有三3 天前
Redis--Lua脚本以及在SpringBoot中的使用
spring boot·redis·lua
宁小法3 天前
lua脚本在redis中执行是否是原子性?
redis·lua·阻塞·原子性·回滚
宁小法3 天前
lua脚本在redis中如何单步调试?
redis·lua·调试
夜猫逐梦5 天前
【lua】二进制数据打包和解析
lua