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。
渲染
Unity中修改了Material的一个属性后,该Object就会单独实例化出一个Material,所以它就不能被动态Batching了,是这样吗?
- 是的,所以我们在Material使用详情中对内存中驻留的Material进行了详细的检测和分析,如下图所示。
- 图中后缀为(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 插件)来尽可能降低上述实时阴影带来的性能开销。