【Unity】游戏项目经验大杂烩

大杂烩以【问题和解决方案】的形式来进行说明

我的文章可当成是笔记来看待,这些都是亲身经历的。最后更新时间:2019年6月26日

一、【优化相关】

(1)问题:MMORPG游戏中,当一个单位受到攻击时会显示伤害UI(数字Text)在3D场景上,最简单的做法是创一个带Canvas组件的父物体和其带Text组件的子物体,将Canvas的Render Mode设置为World Space即可移动这个UI到单位的附近,从而实现显示到3D场景上的效果,但是当频繁弹出伤害UI时会卡顿。

解决方案:一个Canvas是一个DC(draw call),尽量少用Canvas来去将UI放到3D场景,而是采用SpriteRenderer组件和图集的形式来进行渲染3D场景上的简单UI,只要控制好当前3D场景上的UI图片是同一个图集,就只会有一个DC而已,如果用Canvas来去代替每一个带SpriteRenderer的物体,就会有多个DC,有多少个Canvas就有多少个DC,DC越多游戏性能越差。上面的情形只是针对当场景会出现多个简单UI情况的优化,如果是单个复杂UI且需要与用户交互的,那自然选用Canvas形式。

(2)问题:项目中有一个UI的渲染是交给自定义Shader进行的,Shader实现了动态局部黑色遮罩(用于引导系统),测试时发现当这个UI出现游戏FPS会明显降低,导致游戏严重卡顿。

解决方案:在排查问题时,首先确定了不是GC问题,也不是DC过多问题,而是Shader问题,因为这个Shader计算量太过于庞大,导致FPS明显下降,可以说是GPU处理不过来导致,触发方式是减少Shader的计算量,优化算法,减少使用for,if语句,采用Shader相关运算函数库来进行,但是在这些都考虑过了之后还是卡顿,那就要考虑从外部传入Shader的参数考虑,应尽量减少外部传入的参数,通过压缩参数数据来达到减少Shader计算量的目的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值