技术分享连载(七十六)-阿里云开发者社区

开发者社区> 人工智能> 正文

技术分享连载(七十六)

简介:

性能优化

Q1:Unity对GameObject.active()这个底层具体做了什么?因为在优化项目的时候看见有些界面active()这个函数造成的开销比较高,我采取的办法是移除摄像机的范围,这是参照UWA以前文章找到的办法,但是我还是想知道Unity对Active底层具体做了哪些操作,否则会有点困惑。

有一点可以明确的是,至少SetActive后,如果GameObject被激活,那么会调用该GameObject和所有子GameObject上的所有组件的OnEnable函数。而各种不同的UI组件的OnEnable中也有各种不同的操作。 如果题主希望深入研究下,可以看一下NGUI或者UGUI的源码,OnEnable具体做了什么都可以看到。同时,针对UI界面而言,还会在同一帧里触发其他的相关函数,出现后续的开销,如UGUI里的SendWillRenderCanvases和NGUI里的UIPanel.LateUpdate。

该问题来自UWA 社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5996b23886e632f11f9c1582


资源管理

Q2:还是老生常谈的昼夜变换效果,需要两份Lightmap来lerp。开始我认为,只要模型不变,烘培参数不变,如果只改变灯光,Lightmap的分布是一样的(事实上开始测试的几个小场景也的确没问题)。但是在某个大场景烘培2份LM的时候,发现部分物体UV2分布的位置变了。请问,在不手动分uv2的情况下,是否有办法锁定UV2分布?因为资源量比较大,美术人员不希望手动分UV2。

根据我的实践结论,如果场景物体没有移动,没有改变过Lightmap Scale,光罩面板里的分辨率等参数也保持不变,只是灯光位置和参数发生了变化,那么是不会引起物体的光照Index和Scale 这两个参数的变化。但是为了避免多次渲染,最好连续为不同光线条件进行渲染,以防无意移动了某个物体,造成整份渲染无用。另外手动保存Index,Scale两个参数好像也是无效的,因为如果缺少场景同名文件夹内的Lightmapping Asset的那个光照文件,场景光照贴图就无法加载,而且通常我们场景内的物体是要批量静态的,而批量了后的物体是无法手动赋值Index和Scale这两个参数的。

实例:我的项目中
请输入图片描述
请输入图片描述
请输入图片描述
这三套光照贴图都是公用一套"UV"的,在编辑器中还可以自己写个Editor脚本来静态加载调试。
请输入图片描述

此问答来自于UWA 问答社区,感谢 ID为 Blandon 的朋友提供了相关回答,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/5992e3aae85f22ea2dc0c603


资源管理

Q3:我们在iPhone5c上测试时发现Font.CacheFontForText会造成很严重的卡顿,看了UWA的Blog,了解到可能是因为创建FontTexture导致的开销。那是否可以认为如果我们一开始申请了足够大的Font Texture,后面即便有新的文字,开销也不会很大? 如果可以这么做,一开始申请使用的字符串是根据自己项目生成一个字典,还是直接使用网上3、4千字的常用字库更好?

是的,如果Font.CacheFontForText开销较大,那么在无法降低字体数量的情况下,一开始增大Font Texture是较为可行的方法。建议根据自己项目的字体来撑大Font Texture,避免不必要的浪费。 同时,也建议看一下这篇关于字体的精简优化方法。

此问答来自于UWA 问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/59917a6e1ae4fee75dc97e3d


资源管理

Q4:有什么办法可以获取到MemoryProfiler里的Other那项里面的Objects和SerializedFile的详情信息呢?

目前Unity引擎是没有API来获取这两处的详细信息的。 不过,对于Objects的大小,一般来说不需要去特别注意,因为在真机上是没有的。 而SerializedFile下面主要是AssetBundle的具体使用情况,可在UWA线上性能检测版本中查看详细每帧的AssetBundle的使用情况,如下图所示。
请输入图片描述






原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章