Unity游戏开发入门unityunity性能优化

【Unity优化】Unity优化技巧进阶开篇

2017-03-01  本文已影响319人  AndrewFan

做游戏好多年了,关于游戏优化一直是另开发者头疼的一个问题。因为优化牵扯的内容很多,要求掌握的知识点比较全面。在接下来的系列文章中,我想分享一下自己的一些经验。一些有误或者不完善之处请小伙伴们给我意见,加入一起探讨和学习。

程序消耗

所谓的优化,目的应该是尽可能减弱某种消耗,而在Unity上来说,大概可以分为以下几种:

程序的运行速度,一般是指运行帧率,也包括加载速度。是我们首要考虑的重点,也是将会花最多的精力去探讨的话题,运行帧率是游戏类项目的一个非常重要的性能指标,帧率的下降将直接导致游戏体验的下降。
程序的资源消耗,一般是指包体大小,占据用户客户端的存储空间大小,也包括网络消耗,占据多少带宽。这些虽然不那么影响用户当下的体验,不过指标太高也会降用户接受度。
程序的功耗消耗,一般是指应用程序的耗电量,一款程序做的很好,但是功耗太高,使用后短时间内发热太厉害,也会导致玩家无法使用。这种优化跟显卡直接关联,显卡厂商也有很多优化测试和评估程序帮助我们实现降低功能。
按优化的优先级来说,程序的运行速度是首要的。我先列出今后可能会涉及到的关于提高运行速度进行相关的优化策略。

运行速度的瓶颈

我自己所认为解决优化问题的所有手段虽然很多,不过关键的是思路就是找到适合你自己的项目的优化方法,消除性能消耗的瓶颈。
一般而言,运行速度可能存在的瓶颈有以下一些方面:

需要说明的是,这里的带宽消耗是说从CPU端传送数据到GPU时所消耗的带宽,而不是网络消耗。
以上的所有部分,都有可能成为你的程序运行速度的瓶颈,因此我们需要掌握一些相应的优化手段来消除这些瓶颈。
有些概念,比如DrawCall、顶点计算、片元计算,做一个简单解释:
DrawCall:以OpenGL为例,就是一次OpenGL渲染流水线的运行过程,固定流水线简单示意如下:


这里写图片描述

也就是说,假设现在Unity世界中有一个物体的模型,从其上的所有顶点,如何经过顶点的装配、裁剪,再到将处理后的面(片元)渲染出来的一整个流程。
上图是固定流水线的流程,而当前我们使用的GPU都是可编程的流水线,也就是在上述步骤中插入一些可编程的环节。包括前面所说的:逐顶点计算、片元处理等。

优化策略

针对上述问题,我们需要提出相应的解决方案。

  1. 如何提高脚本运行效率?
  1. 如何避免频繁的GC?
  1. 如何降低DrawCall?
  1. 如何优化顶点数和顶点计算?
  1. 如何优化片元计算?
  1. 如何降低物理计算?

后续

以上是我列出的将来可能涉及到的话题,有的可能就是一句话就能了解,有的可能深入探讨的话题就比较深入。其中关于“为快速产生和消灭的大量对象建立缓冲池(Pool)”这个话题,可以参见我的博客《Unity3D-使用对象池高效管理内存》一文。后续其它话题,我会陆续整理和更新。

本文参考:http://malideveloper.arm.com/downloads/Unite_2013-Optimizing_Unity_Games_for_Mobile_Platforms.pdf

版权声明:本文为博主原创文章,欢迎转载。请保留博主链接:http://blog.csdn.net/andrewfan

上一篇 下一篇

猜你喜欢

热点阅读