UWA

每天一点UWA:第十二周

Posted by 蔡华的博客 on October 23, 2017

UI

对于UGUI文字花屏问题,有什么推荐的解决方法吗?

  • 对于UGUI字体花屏的现象, 很有可能是字体的UV不准确导致。
  • 关于UGUI字体花屏和乱码
  • UGUI研究院之Text字体花屏(二十二):http://www.xuanyusong.com/archives/4259

工具

最近用Deep Profiler发现项目里有一个直接调用Color != Color的接口耗时很高,而且百分比也很高(不管是Self还是Total)。但是如果用Profiler.BeginSample显示时,其耗时又很低,百分比也很低几乎等于0。这样的情况下是Deep Profiler出问题了吗?

  • 针对上图具体例子来看,Deep Profiler中RoleRender_ChangeColor.get_running的CPU开销虽然较高,但其参考意义不大。因为不开Deep Profiler模式,此处开销是不会这么高的。
  • 这是因为,图中的开销实际上是操作了200次循环且获取时间戳的开销,也就是说,当循环或者操作大量次数时,Deep Profiler模式中本身统计耗时操作的时间占比很大,所以此处反馈的时间其实并不是研发团队想看到的真正代码耗时。这也是为何很多团队反馈Deep Profiler统计不算准确的原因。

粒子

粒子系统里面使用到的模型,是不是读写开关必须要打开,否则会崩溃?

  • 这个问题在第六周的内容中有提到原因。在较新的版本上(例如4.7.2,5.3.5 等版本)进行了各种情况的测试后,尚未复现出这一现象。因此,我们建议研发团队可以尝试关闭 Readable选项。

模型&动画

SkinnedMeshRenderer的Mesh是不是不能动态修改?属性里只开放了SharedMesh。

  • https://blog.uwa4d.com/archives/TechSharing_51.html mark一下。

渲染

Unity中修改了Material的一个属性后,该Object就会单独实例化出一个Material,所以它就不能被动态Batching了,是这样吗?

  • 是的,所以我们在Material使用详情中对内存中驻留的Material进行了详细的检测和分析,如下图所示。 image
  • 图中后缀为(Instance)的材质均为修改材质属性而生成的临时材质,对于这种情况,我们建议研发团队应严格将Instance材质数量控制在尽可能小(<10)的范围内,而对于过高数量的Instance材质,建议研发团队考虑是否可以通过动态更换Material的方式来代替修改材质属性的方式,从而来减少不必要的Instance材质,进而提升物体动态合批的几率。

游戏中有一些静止的建筑,会和整个场景一起烘焙(包括了每个建筑在地表的阴影)。现在希望这些建筑是逐步开放的,比如玩家1级的时候只有建筑A开放,2级的时候建筑B开放,现在的问题是当建筑未开放时(SetActive(false))地表的相关阴影还在。这种问题一般是怎么处理的?

  • 这种问题是因为研发团队将整个场景烘焙成一张Lightmap所致。如果地图中的建筑是固定的,且游戏中并没有动态改变方向光的需求(比如Time Of Day模拟),那么可以尝试以下方法来实现需求:
  • (1)如果建筑物是根据等级而批量出现的,那么可以尝试根据等级不同而烘焙相应建筑群的Lightmap,然后在游戏中根据需求动态替换Lightmap;
  • (2)如果是逐个出现且建筑之间相距较为紧密的话,那么建议尝试通过Dynamic Projector(Asset Store插件)或Shadow Map(Unity自带阴影)来进行处理,因为Lightmap方法已无法支持这种需求。同时,可配合Fast Shadow Receiver(Asset Store 插件)来尽可能降低上述实时阴影带来的性能开销。