7

Addressable资源热更新疑问

 3 years ago
source link: https://blog.uwa4d.com/archives/TechSharing_243.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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对应目录,启动游戏时报错:

1.png

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

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

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

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

感谢Hybrid_8974@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5fb9334d10a17c6c2b09d236


Texture

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

2.png

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

3.png

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

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

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

4.png

感谢题主halm@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6051be6fcfa35d5b53669b27


Shader

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

5.png

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

感谢jim@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/604f2c87cfa35d5b53669ac5


Rendering

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

6.png

7.png

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

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

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

感谢Prin@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6050a8d3cfa35d5b53669b10


Script

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

8.png
9.png

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

经过验证: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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5ffd97b510a17c6c2b09d9f1

封面图来源: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(原群已满员)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK