1)如何优化.so mmap内存占用
2)模拟器下物理碰撞失效
3)Unity RenderTexture的释放在安卓上并不能使GL内存完全回落
4)数字人中,怎么做到胡子固定在嘴巴皮肤上
这是第319篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
Memory
Q:项目PSS内存过高,使用adb指令抓取内存构成,发现.so mmap部分达到了180MB。这块有没有优化建议?
A1:可以从以下三个方向查一下:
1. 泛型Template用的是否较多
2. 自动化生产的代码是否较多
3. Lua生产的Wrapper代码是否较多
感谢小ben@UWA问答社区提供了回答
A2:还有以下两点:
1. 删除无用插件、代码
2. IL2CPP是否进行裁剪
感谢郑骁@UWA问答社区提供了回答
Physics
Q:在雷电模拟器下,有大概率车与动态创建物体没碰撞,但是很奇怪的是某些相同Layer有的可以碰撞。
后面直接空场景打包模拟器运行,创建cube + rigidbody赋值不同Layer模拟,有时候是有的Layer之间全部没有碰撞,还会出现同一个运行每次会碰撞的Layer都不一样。
查了好久没啥思路,有没有大佬遇到相似问题?
以上问题有哪位大拿也曾经做过类似的测试,欢迎转至社区交流分享
Memory
Q:Unity RenderTexture的释放在安卓上并不能使GL内存完全回落?
Unity版本:2020.3.21.f1
测试机:HUAWEI P30
内存统计工具:Perfdog
问题详情:
情况1:创建RT并立刻卸载,此时GL内存完全回落。
情况2:创建RT不卸载,此时GL上升并稳定。再创建RT并立刻卸载,此时GL上升,但回落时(也有可能不回落)不会回到之前位置,会有一部分残留,类似于泄漏的情况。
想请问下为什么会发生这种情况?
我搭建了一个测试场景,主要测试了两个函数,第一个函数只生成RT不卸载、第二个函数生成RT并立刻卸载。
在真机上测试结果:
可以看到前三次,调用方法2对应了情况1,此时内存回落正常。但在调用方法1后再调用方法2,则会产生内存无法回落到原位置的情况。
目前查到的资料:参考了UWA上的一篇文章《分享一次查找GfxDriver内存暴涨的经历》
里面是这样解释的:
对于GL显存,里面说到回落不到原位置的原因是只卸载了Main Memory,而不卸载Pinned Memory,那有什么方法卸载掉Pinned Memory使内存完全回落的方法吗?
我对Main Memory和Pinned Memory具体是什么不太了解,想请教一下大家。
以上问题有哪位大拿也曾经做过类似的测试,欢迎转至社区交流分享
Animation
Q:数字人中,怎么做到胡子固定在嘴巴皮肤上?口型控制应用时,胡子怎么跟着嘴巴皮肤同步运动变形?
A:在数字人模型中,胡子的运动变形可以通过在嘴巴皮肤模型上添加骨骼来实现。首先,您需要在嘴巴皮肤模型上创建一些骨骼,并将它们附着在相应的位置。然后,您可以使用骨骼动画功能,在口型控制时通过控制骨骼的运动来实现胡子的跟随变形。
为了保证胡子能够固定在嘴巴皮肤上,您可以在创建骨骼时,在骨骼根部和嘴巴皮肤模型之间添加控制点(Control Point)。控制点可以用来连接骨骼和嘴巴皮肤,并使得骨骼的运动对嘴巴皮肤产生影响。通过添加控制点,您就可以在保证胡子固定的同时,让胡子能够随着嘴巴皮肤的变形而变形。
感谢Hyhom@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方问答社区:answer.uwa4d.com