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

相关推荐
慢慢沉7 小时前
Lua(数据库访问)
开发语言·数据库·lua
慢慢沉7 小时前
Lua协同程序(coroutine)
lua
慢慢沉1 天前
Lua元表(Metatable)
lua
慢慢沉2 天前
Lua(字符串)
开发语言·lua
慢慢沉2 天前
Lua(数组)
开发语言·lua
慢慢沉2 天前
Lua(迭代器)
开发语言·lua
慢慢沉2 天前
Lua基本语法
开发语言·lua
Feng.Lee2 天前
接口测试Postman工具高级使用技巧
功能测试·测试工具·lua·postman·可用性测试
三翼鸟数字化技术团队3 天前
鸿蒙平台运行Lua脚本
lua·harmonyos