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

开发者社区> 开发与运维> 正文

技术分享连载(三十六)

简介:

资源管理

Q1:我在UGUI里更改了Image的Color属性,那么Canvas是否会重建?我只想借用它的Color做Animation里的变化量。

如果修改的是Image组件上的Color属性,其原理是修改顶点色,因此是会引起网格的Rebuild的(即Canvas.BuildBatch操作,同时也会有Canvas.SendWillRenderCanvases的开销)。而通过修改顶点色来实现UI元素变色的好处在于,修改顶点色可以保证其材质不变,因此不会产生额外的Draw Call。


资源管理

Q2:AssetBundle中资源同名但实际不同,请问会在UWA的资源检测报告中被认为是冗余的吗?

项目中的同名资源在UWA的资源检测报告中是不会被认为冗余的。在资源检测过程中,我们并不是通过资源的名称来判定其是否冗余。如果资源本身是不同的,即使名称相同,UWA报告也不会判定是冗余。


UI 输入

Q3:Unity自带的UI Shader处理颜色时,改 _Color属性不会触发顶点重建吗?

在UI的默认Shader中存在一个Tint Color的变量,正常情况下,该值为常数(1,1,1),且并不会被修改。如果是用脚本访问Image的Material,并修改其上的Tint Color属性时,对UI元素产生的网格信息并没有影响,因此就不会引起网格的Rebuild。但这样做因为修改了材质,所以会增加一个Draw Call。


资源管理

Q4:移动游戏场景中,相同的怪物会动态合并吗?如下设置可行吗?
请输入图片描述
请输入图片描述

默认情况下,带蒙皮的Mesh是不支持动态合批的。如果场景中相同材质的蒙皮网格数量很多,可以考虑通过插件MeshBaker来进行合并,具体方法大家可以参考好插件让你事半功倍!


资源管理

Q5:EventSystem.Update()占用过高怎么优化?
请输入图片描述

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部分的源码来进行修改以达到类似的效果。





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

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

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章