UWA QQ群:465082844
资源管理
Q:我在UGUI里更改了Image的Color属性,那么Canvas是否会重建?我只想借用它的Color做Animation里的变化量。
A:如果修改的是Image组件上的Color属性,其原理是修改顶点色,因此是会引起网格的Rebuild的(即Canvas.BuildBatch操作,同时也会有Canvas.SendWillRenderCanvases的开销)。而通过修改顶点色来实现UI元素变色的好处在于,修改顶点色可以保证其材质不变,因此不会产生额外的Draw Call。
资源管理
Q:AssetBundle中资源同名但实际不同,请问会在UWA的资源检测报告中被认为是冗余的吗?
A:项目中的同名资源在UWA的资源检测报告中是不会被认为冗余的。在资源检测过程中,我们并不是通过资源的名称来判定其是否冗余。如果资源本身是不同的,即使名称相同,UWA报告也不会判定是冗余。
UI 输入
Q:Unity自带的UI Shader处理颜色时,改 _Color属性不会触发顶点重建吗?
A:在UI的默认Shader中存在一个Tint Color的变量,正常情况下,该值为常数(1,1,1),且并不会被修改。如果是用脚本访问Image的Material,并修改其上的Tint Color属性时,对UI元素产生的网格信息并没有影响,因此就不会引起网格的Rebuild。但这样做因为修改了材质,所以会增加一个Draw Call。
资源管理
Q:移动游戏场景中,相同的怪物会动态合并吗?如下设置可行吗?
A:默认情况下,带蒙皮的Mesh是不支持动态合批的。如果场景中相同材质的蒙皮网格数量很多,可以考虑通过插件MeshBaker来进行合并,具体方法大家可以参考好插件让你事半功倍!
资源管理
Q:EventSystem.Update()占用过高怎么优化?
A:EventSystem.Update 的开销分为两个部分:
1、来自被触发的响应事件,这部分的开销实际上并不属于事件系统本身,比如:某次点击触发了一个开销很高的逻辑函数,尤其是涉及到资源的加载和实例化。对于这类开销,我们建议通过Profiler.Begin/EndSample或者UWA提供的UWA API,对这些逻辑函数进行进一步的分析。
2、事件检测的开销,在默认情况下所有的UI元素都是事件检测的目标,因此当界面上UI元素数量很多,且长时间接触屏幕时,会有较高的持续开销。对于这类开销,我们建议通过以下几种方式来优化:
a) 合理划分子Canvas,只有需要检测事件的界面才需要挂上GraphicRaycaster组件。
b) 在Unity5.2之后的版本中,尽可能将不需要参与事件检测的UI元素的 Raycast Target 属性的勾选去掉。而对于Unity 4.x的版本,则可以尝试对UI部分的源码来进行修改以达到类似的效果。
今天的分享就到这里。也欢迎热爱进步的你加入UWA的QQ群(465082844),也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。 比起闭门造车,我们更乐意与大家各抒己见,畅所欲言;比起形而上的泛泛而谈,我们更乐意与大家直击痛点,对症下药。
报名| U Sparkle 开发者计划招募中!
推荐阅读
Unity游戏性能数据分析报告 | UWA技术直播首秀精彩回顾(附视频)| USequencer 初识 | Unity性能优化红宝书 |《仙剑奇侠传3D回合》性能精讲 | 国战MMO《六龙争霸》性能精讲 | UGUI 填充率技巧两则| Unity游戏界面解决方案: PSD For UGUI !UWA代码堆栈,和代码性能瓶颈说“不”!| 如何打造高逼格耀斑效果