有幸能够来参加一次Unite开发者大会,博主的实际工作经验也就一年的时间,大会上的很多东西都在开发中不曾涉及过、或者是因为行业的区别没有涉及过,但是将大会上学习到的其他经验列举出来给自己梳理一个努力的方向,也希望能够帮助到没有参加到大会的其他Unity程序员,大牛可以多加指点。
在KeyNote专场中,Unity官方人员主要介绍了新版Unity的新特性,以及他们针对Unity底层所做过的优化,新版Unity5.6以后的版本,渲染性能、效果都有所提升,而且针对UGUI做了更多的优化和拓展,使得基于UGUI的2D游戏开发更加的便捷,以及功能更加强大的TimeLine工具,具体的更新内容大家可以去unity官网查看。
在参加两天的大会之后,博主发现很多公司都是一直在更新Unity引擎的版本,可能大公司因为稳定性的问题或是对低版本熟练的问题,某些游戏的开发可能是使用了低版本的Unity引擎,比如《王者荣耀》《龙之谷》,但是在大会上他们都有表示会将引擎升级至5.x以后的更新版本,因为更新版本的会有更好的性能优化和功能拓展,使得开发者有更多的精力去集中于创新功能、玩法的实现,而不是专注于插件的开发和性能的优化。
Keynote专场告诉我们一个道理,在允许的条件下,一定要使用他们的最新版本,这样才能让你更加专注于产品的开发,而非引擎本身。
很短的视频很炫丽的《琪亚娜·极乐净土》利用N多顶级Shader。
一段很感性的经验分享。
删除相同关键帧,自定义关键帧压缩
监控ParticleSystem和动画的数量
a.按需区分图集,平衡共有图集数量和使用率
b.拆分alpha,对于没有渐变过度的alpha图进行尺寸压缩
a.多线程序列化反序列化
b.减少协议数量,减低反射内存消耗
a.前期大约20mb table 使用txt读取解析
b.使用binary读取可以节省一半运行时内存
c.string使用的intern处理
d.共享存储相同的数据结构
e.减少再次索引的数量,dictionary,quene等
a.合并场景材质,减少静态物体的Draw Call
b.合并任务Mesh
c.特效分层显示,设置layer
d.裁剪控制,镜头控制,Occlusion Culling
a.控制飘字频率,减少UIMesh的动态更新
b.控制飘字的最大数量
a.Animator
b.ParticleSystem
a.复杂特效的Shader需要图形程序或者TA特别优化(去除cutout,合并blend,优化指令)
b.使用数学手段
c.使用shaderlod显示不同的效果,按机型使用vertex light和pixel light
a.使用加载队列
b.人物分帧异步加载
c.平衡预加载与及时加载的数量和大小
d.小心其他操作对加载的影响
e.与ab卸载的冲突
a.大量数据的一次性写出
主要是针对《王者荣耀》状态同步VS帧同步、网络、性能优化进行讲解。
1.状态同步优点:
a.安全性非常高
b.另外状态同步对于网络的带宽和抖动包有一个更强的适应能力它的断线重回比较快
c.客户端性能优化也,客户端在做性能优化的时候,可以做裁剪,避免不必要的渲染
2.状态同步缺点:
a.开发效率要相对帧同步差一些,调试周期比较长,想要达到优化好的水平,也是比较难的。
b.它比较难做出动作类游戏打击感和精确性。因为某些功能(射击)会在短时间内消耗大量运算性能
c.会随着游戏的复杂度,角色的多少,流量也会逐渐增长。
3.帧同步优点:
a.开发效率比较高
b.另外它的打击感确实比较强
c.流量消耗是稳定的
4.帧同步缺点:
a.网络要求比较高
b.断线重回时间很长
a.避免使用反射
b.避免使用SetActive,用layer代替
c.减少拆箱装箱操作
d.Unity官方推荐CG每帧200字节
e.控制DrawCall,画面裁剪
f.UI复杂使用3DUI,不适用UGUI,比如血条等
g.减少IO
h.表现与逻辑分离,逻辑可以利用C++,进一步降低GC消耗
i.创建自己的内存管理,对象管理,重新实现容器类,甚至是反射功能
总结:
大会虽然不会给开发者带来实质性的提升,但是它却可以给我们指明一条努力前进的道路。