如何在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

相关推荐
麻瓜code4 小时前
秒杀优化三连:Lua + 阻塞队列 + Redis Stream,响应从 3.4 秒到毫秒级
redis·junit·lua
努力努力再努力wz4 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
hey you~8 小时前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
我不会起名字32210 小时前
Redis pipeline 用了反而更慢:3 类误用与正确的批量姿势
redis·pipeline·lua·rtt·批量
努力努力再努力wz1 天前
【Lua入门系列】从 C++ 迭代器到 Lua 迭代器:一文深入理解 Lua 有状态以及无状态迭代器与泛型for、闭包、ipairs、pairs 和 next
开发语言·c++·lua
屈冠成2 天前
ShopXO商城系统测试报告
开发语言·spring·maven·lua
Wang's Blog2 天前
Java 项目实战: 交友项目 - 用户体系集成:根据环信id查询用户详情
java·lua·交友
努力努力再努力wz2 天前
【Lua 入门系列】从顺序执行到分支与循环:一文理解 Lua 控制结构、作用域与跳转规则
junit·单元测试·lua
huoyueyi3 天前
《融天AI-APP从0到1开发实录》
开发语言·lua
努力努力再努力wz3 天前
【Lua入门系列】从动态类型到变量作用域:彻底理解 local、全局变量与跨文件访问
开发语言·junit·lua