警惕GfxDriver内存泄漏!

警惕GfxDriver内存泄漏!

本期聚集话题: UGUI Android齐刘海适配、UWA GOT测试Mono卡顿、如何清除Unity中创建的Mesh的顶点色、MeshBaker的适用性...


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

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


内存

Q:我用的是Unity 2017.2.0这个版本,在 PC Editor 上,Profiler 显示 GfxDriver 不断增加,经排查是由 Canvas 里一个游戏对象引起,该游戏对象成分如下:
请输入图片描述
只要将该游戏对象关闭,GfxDriver 立刻停止增加,因此我怀疑该版本的 Unity 存在问题,导致这种制作动画的方式都会引发内存泄漏,于是我把该游戏对象拉到一个空场景中,然而并没有发现 GfxDriver 增加。到此,不知道该怎么进一步排查问题。

这是Unity 2017上UGUI的Bug,在Unity 2017.1版本中无论是Editor还是Release版本都会出现该泄露问题。
Release版本在2017.2以后被修复,但Editor版本要在2017.4.1版本以后才被修复。
对于真机版本,题主在当前版本中可不用担心,如果担心Editor版总是因为内存过大而崩溃,可以尝试升级到2017.4.1以后。

该回答由UWA提供,欢迎大家转至社区进行进一步交流:
https://answer.uwa4d.com/question/5b0fa6a754646026e9ddd6d7


UI制作

Q:有人做过 UGUI Android齐刘海(如荣耀10)的适配吗?大家有什么经验可以分享的吗?

给个简单的方案吧,以iPhone X为例。
1)准备launch image,以关闭iPhone X默认的两侧黑边。(Unity 2017之后可以直接提供x的闪屏图片,可略过此步骤)

cp -R "../yourPorject/Assets/ArtResources/SplashScreen/iphonex_h.png" "./Unity-iPhone/Images.xcassets/LaunchImage.launchimage/iphonex_h.png"
cp -R "../yourPorject/Assets/ArtResources/SplashScreen/iphonex_v.png" "./Unity-iPhone/Images.xcassets/LaunchImage.launchimage/iphonex_v.png"
cp -R "../yourPorject/Assets/ArtResources/SplashScreen/Contents.json" "./Unity-iPhone/Images.xcassets/LaunchImage.launchimage/Contents.json"

2)我们在UGUI Root下,有个desktop的概念,作为所有UI的祖先层,设为水平垂直方向均为stretch, Top设为88, Bottom设为-88。(88是最小间隔,132是官方推荐的安全间隔)。

其中第2步对其他ui使用者都是透明的,两侧填充无意义的UI图片,对UI制作上也几乎没有影响。整个改造过程很短,推荐尝试。
PS:未考虑iPhone X的横条。
感谢史云柯@UWA问答社区提供了回答

有一个简单的方案,就是给最上层界面配置一个横纵Stretch自动拉伸的RectTransform,检测当发现是iPhone X时,打开界面代码中自动设置 Left Top Right Bottom 为44.这个方案我在雨松那里看到的,是个很简单粗暴的方案,当然有些地方可能还要微调一下。参考网址:http://www.xuanyusong.com/archives/4464
感谢小小克劳德@UWA问答社区提供了回答

此问答来自问答社区,欢迎大家转至社区进行进一步交流:
https://answer.uwa4d.com/question/5b0cd5fa09749726e4188d42


资源

Q:Unity中创建的Mesh为什么带有顶点色?如何才能创建不带顶点色的Mesh?或者怎么在unity中把顶点色给抹掉?

我已经做过以下尝试:
1)mesh.color = null,mesh.colors32 = null 没用。
2)重新new一个Mesh,不赋值顶点色,没用。
3)转成obj再放到Unity中看,居然还有顶点色。但是把obj放到Max中看,是没有的,转成FBX再放到项目中,还是有顶点色。

经过一番探索,发现问题:关闭Use Direct3D 11选项,重启Unity即可。关了Use Direct3D 11之后,重新创建Mesh,此时已经不带顶点色了。Obj文件以及不带顶点色的FBX文件,直接预览,顶点色也没了。开关位置:Edit>Project Settings>Player>Other Settings>Use Direct3D 11(PC选项卡下)

感谢题主@CrazyCoder分享经验,欢迎大家转至社区进行进一步交流:
https://answer.uwa4d.com/question/5b10004109749726e4188d96


堆内存

Q:使用MeshBaker动态合并模型,在连续动态添加合并模型是产生了大量的GC,随着添加的越多,GC产生的越多,可能有4MB大小,这个是什么情况?MeshBaker不适合用来做动态模型合并?

是的,Mesh Baker插件是在上层对Mesh数据进行大量合批,期间需要生成大量的Vertex Array,从而会造成大量的堆内存分配。如果是复杂的MMO、ARPG等需要大量Mesh合并的项目,一般不建议使用Mesh Baker这个插件。

静态物体的话,其实可以直接通过Static Batching来做即可。一般Mesh Baker会有团队在游戏运行时动态Batch Skinned Mesh,这个当数量较多时是不建议使用的。

此问答由UWA提供,欢迎大家转至社区进行进一步交流:
https://answer.uwa4d.com/question/5b11089b54646026e9ddd6ed


GOT

Q:今天刚开始用GOT,发现调试Mono的时候总会在战斗刚开始的时候卡死,Overview和Assets都没不会这样。请问这是什么原因造成的?卡死的时候应该正在加载一些资源,是和这个有关么?

这说明此时的堆内存在超大量分配,UWA GOT需要大量计算来记录这些分配的堆内存信息。另外,如果在资源加载时是否也伴随着Log的输出,则会加剧卡顿的程度。建议题主先关闭Log输出试试。

此问答来自问答社区,欢迎大家转至社区进行进一步交流:
https://answer.uwa4d.com/question/5a0c2ab3784c7a0f682d3719

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

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