问答 Addressable 资源热更新疑问

侑虎科技 · 2021年05月10日 · 1955 次阅读

1)Addressable 资源热更新疑问
​2)如何解决远处网格线会花的问题
3)关于着色器中某些特殊图片的用途
4)Lightmap 在内存中有重复加载
5)Unity Job System 问题


这是第 243 篇 UWA 技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间 10 分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)

Addressable

Q:Addressable 资源热更新,提示 CRC Mismatch,将需要热更新的资源已经上传至 CDN 对应目录,启动游戏时报错:

A:我们的项目之前也遇到了同样的问题,具体表现是打包增量后 Bundle 的 Hash 没有改变,但是 CRC 改变了,导致加载出错。

目前我们这里有两种处理方案,仅供参考:

  1. 就是按照 Unity 官方说的,在 Schema 上禁用掉 CRCCheck;但是这种方式在校验 Bundle 下载的完整性和正确性上可能会有些问题。

  2. 热更新流程上加入 Hash 和 CRC 的双重检测,检测到其中任一值有变化就认定该 Bundle 需要更新,并重载最新的 Catalog 文件;同样这样做的问题是有可能会平白增加很多 Bundle 下载,即便这个 Bundle 的内容并无更新。

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

Texture

Q:想要实现网格线的效果,但是远处的线会花,是什么原因?这是一个正方形的 Mesh,然后使用 UV 的缩放铺满 n 个小格子,图片设置成了 Repeat,并且关闭了 Mipmap。但是还是会出现远处的线花了,有什么解决方案吗?

A1:把 Texture 的 Aniso Level 值调高试试。

Aniso Level 就是用于低角度看地面的。另外把 Filter Mode 设置成 Trilinear,就不会出现一段一段的效果了,就是开销比较大。

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

A2:按下图调整后,问题解决了:

感谢题主 halm@UWA 问答社区提供了回答

Shader

Q:如下图所示,因为资源是从其它地方下载的,没有详细说明,想知道这种图在 TA 方面来说,是用来做什么的?T_M_Body_Msa_b.png、T_M_Body_Msa_g.png 和 T_M_Body_Msa_Mtl.png 分别代表哪一块着色器中用到的,给个关键字提示下,谢谢。

A:分别为 b(Bump)、g(Glossness) 和 Mtl(Metallic)。

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

Rendering

Q:如下图,为什么 Lightmap 在 Profile 里会显示有重复的呢?我看每一个都是 40MB,有什么办法优化吗?而且对应的引用脚本里,没有发现对 Lightmap 的引用。

A:看起来每张 Lightmap 都加载了两份。题主有没有写自己管理 Lightmap 的机制呢?是一次就加载两份还是在切换场景或者更换 Lightmap 的时候没有卸载掉?加载场景时有没有使用 LoadSceneMode.Additive,导致场景累加式加载,不卸载之前的资源?

Lightmap 的引用数很高,看看是被哪些脚本索引住了,相应的组件是不是一直驻留。在该卸载的时候要把索引置空。

这个窗口把 GameObject 和 Monobehaviour 互相引用关系都显示出来了,不是直接的引用,确实比较复杂不好找。可以用 Unity 给的专门的 MemoryProfiler 试试,相对清楚一点。

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

Script

Q1:Unity 2020.2.1+Hub 下载的 SDK、NDK、JDK 和 BuildTools 打包错误。

相关错误提示中没有一条提到有价值的信息。

经过验证:streammingAssets 文件有 680(包含)个限制,超过就打不出包了,带不带后缀名都没关系。不清楚是不是个人版的限制?

A1:应该是不会的,上万文件都测试过,没问题。

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

A2:你可以勾选 Custom Gradle properties template,在文件中把 unityStreamingAssets=.unity3d*STREAMING_ASSETS*改为 unityStreamingAssets=.unity3d,就可以了。

如果需要特殊文件类型不压缩,自行添加,以逗号 “, ” 隔开。如 unityStreamingAssets=.unity3d, .bundle。

U3D 从 2020.2.3 开始修改了 aaptOptions 的打包参数,aaptOptions 的数组最大是 255。

aaptOptions 
{
    noCompress = [’.ress’, ‘.resource’, ‘.obb’] + unityStreamingAssets.tokenize(’, ')

    ignoreAssetsPattern = “!.svn:!.git:!.ds_store:!.scc:.:!CVS:!thumbs.db:!picasa.ini:!*~”
}

*PACKAGING_OPTIONS* 

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

Q2:请教下如果希望 streamingAssets 下的都不压缩,文件又都没后缀,要怎么写呢?

A:由于 U3D 2020.2 必须使用 unityStreamingAssets 变量,所以需要你把工程导出,然后修改 aaptOptions,让全部文件不压缩。

参考:https://developer.android.google.cn/reference/tools/gradle-api/4.1/com/android/build/api/dsl/AaptOptions

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

封面图来源:Unity Interactive Grass
可用在 Unity 项目的可交互的草,会在进入场景时将 Unity 原生的草替换成自己生成的 Mesh。
https://lab.uwa4d.com/lab/5b590fe1d7f10a201fe10467


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在 UWA 问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之 “石”,也能攻你之 “玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官方技术 QQ 群:793972859(原群已满员)

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册