HttpWebRequest下载大文件速度变低问题

HttpWebRequest下载大文件速度变低问题

1)HttpWebRequest下载大文件速度变低问题
​2)Unity 2018.4.3X版本打AssetBundle慢
3)Unity 2D地图的动态修改
4)Unity 3D UGUI粒子特效裁剪的解决方案
5)Addressables LoadAssetAsync加载预设体的执行问题


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

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

Script

Q:游戏使用HttpWebRequest进行内容更新,在Google Play只上传小包,打开后再下载资源。

正常下载速度在10MB左右,在使用4G的情况(Wifi下没出现过,4G基本必现)下下载大概10几秒会出现速度断崖式下降,达到10几KB乃至几KB。然后会卡在这个速度进行龟速下载,如果中断连接重新开始断线重连又会回到10MB的速度,基本下载完整资源需要如此反复2~3次。

下载资源放在腾讯云香港服务器,使用腾讯云的CDN加速服务。版本:Unity 2018.4.34。

A:可以检查下:

  1. Wifi下没有出现过问题而4G上出现问题,需要先排查一下是不是运营商的问题,电信移动联通都试一下。

  2. 可以检查一下CDN的状态,CDN的后台应该可以看到2XX、3XX、4XX或5XX出现的次数 ,排除某文件本身存在的问题或者CDN网络不稳定。

  3. 考虑下载一个文件,分多个Range段,多线程下载。

可以参考一下UWA学堂的文章《手游HTTP多线程下载原理与优化》,这篇文章写得不错,解决了很多热更新的资源的痛点。

感谢萧小俊@UWA问答社区提供了回答


Build

Q:Unity 2018.4.3X版本打AssetBundle慢,同样的电脑环境下,已经换过2018.4.36f1、32f1、20f1和34f1版本,但用之前的2018.4.1f1版本打AssetBundle就飞快。

已经把各种资源都试了一波,Unity和工程都放在C盘,都是固态环境,电脑i7-10700,老版本2018.4.1f1飞快,2w资源增量一次3分钟,从头开始打得20分钟左右,然后新版本从头打得10小时+,不知道那个地方我有疏忽,已经来回把工程导入了好几次。

A1:介绍几个分析方法:

  1. 看Editor.log能看到Unity大概正在做什么;
  2. 用Procexp、Process Hacker之类的工具,配置好符号PDB路径,可以看Unity主线程的栈,多刷新几次,能猜到大概在做什么;
  3. 用VS附加一个性能分析器到Unity进程,抓几分钟,能看到热点调用栈。

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

A2:楼主看看这个帖子有没有帮助,也是前不久出现在问答区里面的:
https://answer.uwa4d.com/question/60d3ee2de58b4719dd3e26cd

感谢马三小伙儿@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60f27a5f94846f188da51f71


Rendering

Q:斗斗堂炮弹轰击后地表塌陷如何实现?

A:给对应的场景图片生成一个Mesh,之后打到的时候去更新那个网格即可。

UnityStore上有一个不错的插件可以看一下:
https://assetstore.unity.com/packages/tools/sprite-management/destructible-2d-18125

也可以看一下Poly的算法:
https://blog.csdn.net/6346289/article/details/105760374

感谢萧小俊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60ebf8c694846f188d9c5fcc


UGUI

Q:请问UGUI粒子特效的裁剪有哪些比较好的解决方案?比如Sprite Mask要设置缩放,感觉使用起来有些不方便,比如用Shader如何裁剪?

A1:可以参考一下这个:
https://www.programmersought.com/article/7682124522/

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

A2:可以参考一下这个:
https://blog.csdn.net/akak2010110/article/details/81293913

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


Addressable

Q:我在项目中使用Addressables.LoadAssetAsync加载预设体,然后实例化,在我加载完毕实例化之前就会执行预设体挂载的脚本。如果我再实例化预设体,则会执行两遍脚本。请问这块正确的做法是怎么样的呢?

A1:这个是1.18加了同步加载出现的问题,版本降回1.17.17就好了。

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

A2:发现下面一个帖子,确实是版本的问题,我现在升级到1.18.11,目前没有遇到这个问题了。
https://forum.unity.com/threads/assetreference-instantiateasync-on-addressables-1-18-calls-awake-onenable-and-ondestroy-twice.1109402/

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

20210719
更多精彩问题等你回答~

1.Vulkan与OpenGL的选择是否会对内存大小产生影响
2.关于Unity出AAB包的问题
3.RTS 手游技术难点

封面图来源于网络


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

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