如何用unity3D对游戏运行性能进行优化

Python016

如何用unity3D对游戏运行性能进行优化,第1张

大家在玩游戏的时候可能经常会遇到卡顿,延迟,死机,不流畅等等问题,那么这些问题是怎么引起的呢?如何去尽量的减少这些情况的发生呢?这些问题对于游戏开发者来说是必须要面对的问题, 也是必须要解决的问题。

上面我们例举在游戏运行的过程中可能会遇到的一些问题, 每种问题引起的原因有很多多,但是我们可以从大方向对整体游戏进行优化,使游戏整体性能更优,从而减少这些情况的发生。对于性能优化我们大体可以从四个大方向去优化,即:CPU,GPU, 内存以及网络和IO,下面给大家一一讲解:

CPU优化,在游戏中CPU主要分担着运算的责任,因此像短时间大量的计算从而导致画面不流畅,电量消耗大,发热严重等情况都可能是因为CPU导致的。针对这些情况我们就需要对CPU优化,那么CPU的优化说白了就是对运算的优化,大家应该尽量减少大量运算或者短时间的大量运算,对此大家可以从四方面着手。一是将计算分散到多个逻辑中,减少短时间的大量运算。二是将可以缓存的数据尽量缓存起来,从而避免那些重复的计算。三是减少CPU对资源的申请、销毁与调配。四是使用合理的算法和数据结构,这个也是CPU优化中最重要的。

GPU优化,GPU的职责就是负责游戏中所有的图像、特效的渲染。GPU的消耗过高会导致游戏画面卡顿、画质降低、手机发热等情况,严重影响游戏体验。对于游戏来讲这是致命的。关于CPU优化大家可以从以下几方面入手:

1、资源优化,比如合理规划图集,指定合理的粒子效果,约定模型的三角面数

2、简化着色器,使用多级纹理与材质贴图技术相结合

3、使用LOD技术、遮挡剔除等技术,减少GPU绘制的数量

4、针对不同的系统平台使用对应的压缩格式。

5、优化显存带宽

游戏渲染可以说是游戏的心脏,所以GPU的优化显得尤为重要,需要开发者格外的重视

内存优化,内存的功能我就不多介绍了, 相信大家都了解。由于内存不足所导致的问题有闪退,卡死等。对于内存的优化,一是降低资源的大小,比如剔除不需要的资源、对资源进行压缩等二是及时动态的加载和卸载资源,这样可以大大的减少瞬时内存的压力,减少因内存浪费而给游戏带来不必要的消耗。三是降低资源的质量,这是一种有损的优化,不到最后一般不用,当然我们也可以根据不同的设备使用不同质量的资源,将损失降到最低。

网络和IO优化, 他们主要负责资源的加载, 可能是网络的或者本地的。网络不好,或者资源加载时间过长会让大大降低用户体验。因此在CPU、GPU、内存优化后我们同时也不能忽略网络与IO优化,对于网络与IO的优化,大家可以从以下几方面入手:

1、限制短时间内的发包率

2、合理优化包大小,减少包的冗余数据,降低网络请求次数

3、对回包进行分帧处理,及时响应

4、使用独立线程、协程等手段优化资源加载。

前景广阔,学习Unity3d有前途、有出息,当然也有竞争,有竞争说明比较热门。

2018年BOSS直聘发布一季度报告,互联网行业平均月薪过万!

在岗位上,占据人才吸引力指数前十的以互联网技术类岗位为绝对主体,C++成为最热门岗位。Hadoop、Golang受大数据、区块链等行业热度飙升影响,人才吸引力指数大幅上升,进入三甲。

所以,Unity3d游戏开发工程师一直是游戏公司常年招聘的高薪岗位,甚至经常出现互相"挖人"的现象。

一 · 编程语言及其主要用途

常见的是 C Family (C系列语言),比如:C、Cpp(C++)、C Sharp(C#)、Java、Python、R、JavaScript、Objective-C、Swift、Go、Kotlin 等等。然后有很多脚本语言,Python 也在其内,比如:Ruby、Perl 等。

光说名字意义不大,所以举几个例子。

C 常用于单片机开发和一些接底层硬件的操作使用;

C++ 是 C 的超集,因为直接支持了面向对象所以更多用于游戏、图像开发方面;

C# 是微软为了把 Java 人才引入 Windows 平台设计的语言,和 Java 语法几乎一致,目前多用于服务器后端开发和 Unity 3D 的游戏开发,也有人会用这个做很多 windows 平台下的软件插件甚至常说的软件外挂(外挂其实严格说就是插件,但大陆地区已经有更深层的意义了,所以两者并列举例出来);

Java 是目前最流行的服务器后端开发语言和 Android 开发语言,因为有大量框架和工具包的支持,Java 语言的运行速度已经不能阻挡 Java 成为服务器开发的首选语言。至于是什么服务器后端开发,题主学了 JavaEE 自然便知,通俗举例来说可以 yy 一下:我写了这篇答案,答案存在哪里呢?肯定是在知乎那边!至于怎么存、怎么取,都是后端开发需要设计的问题了。Java 也曾一度是 Android 的首选语言(虽然目前 Kotlin 的影响很多人转战 Kotlin 去了),负责 Android 顶层的 APP 层开发。

Python 是目前机器学习最流行的语言,也可以做服务器开发,有堪比 Java Spring 框架的 Django 作为支持。更多的人会使用 Python 作为机器学习、深度学习的首选语言,因为 Python 语法的简洁和类似数学式表达的规范,当然还是因为包多,很多学者科学家都会使用 Python 做科学研究。

R 语言作用类似 Python,常用于工程方面。还有一门语言是 Matlab,其实称之为语言是不恰当的,因为这是一个软件,脱离了软件就无法生存,远不是编译器那么简单的结构了。MatLab 汇集了太多的工具,便于科学从业人员快速分析数据,写出优良的程序,这种程序语言通常也称之为 Matlab;

JavaScript 是前端开发首选语言,在使用 HTML + CSS 模式绘制出页面图像后,通常都会使用 JS (JavaScript)来写交互、动画、请求、视图内容更新这些操作,这门语言是函数式也是面向对象的语言,灵活度极高,但有了 C Family 任何一门语言的基础就很容易学;

Objective-C 是苹果(Apple.Inc)开发的一门为 mac 和 iPhone 设备开发程序的语言,和 C++ 类似,也是 C 的超集,也是面向对象。但由于其太过于面向对象了(基于消息的传递数据机制)导致很不 C Family,所以对 C 系列人员上手难度偏大,比较冷门。但后来 iPhone 的崛起,导致该语言又一度热议起来;

Swift 是苹果最新发明的一门函数式编程语言,和 OC(Objective-C)的目的一样,为苹果设备而生,但苹果也提倡用该语言做工程方面的扩展,比如苹果会在宣传的时候拿它和 Python 对比。为了兼容 OC 的所有工具包,避免该语言的冷门,创造了 bridge 作为两个语言直接的桥梁,解决了语言兼容问题;

Go 语言是 Google 开发的一门函数式语言,特点是能解决大规模的高并发问题,天然支持多线程使得该语言一出来就广受关注。目前多用于机器学习和一些 Google 自己产品的开发以及后端服务器开发;

Kotlin 是大家常用的 IDEA 开发工具的开发商 Jetbrains 发明的函数式语言,这门语言是基于 JVM 进行设计的,比较完美地兼容了 Java 语言,所以前后端开发都可以使用该语言替代 Java,不确切统计是可以用比 Java 少一半的代码量完成同样的功能并拥有同样的运行效率。类似的 JVM 语言也有 Scale,但比较元老了,兼容力度不大所以也开始广受诟病;

Ruby 和 Perl 这些是典型的脚本语言,Ruby 多用于各个语言的粘合剂,Perl 是 Linux 下最常用的脚本语言,文本处理能力极强。