Unity3D优化总结
1、在使用数组或ArrayList对象时应当注意
- length=myArray.Length;
- for(int i=0;i<length;i++)
- {
- }
避免
- for(int i=0;i<myArray.Length;i++)
- {
- }
2、如果没有必要每帧都处理,则可以每隔几帧处理一次
- void Update(){ if(Time.frameCount%6==0) { DoSomething(); }}
3、定时重复调用可以使用InvokeRepeating函数实现,比如,启动0.5秒后每隔1秒执行一次 DoSomeThing 函数:
- void Start()
- {
- InvokeRepeating("DoSomeThing", 0.5f, 1.0f);
- }
4、少使用临时变量,特别是在Update OnGUI等实时调用的函数中。
- void Update()
- {
- Vector3 pos;
- pos=transform.position;
- }
可以改为:
- private Vector3 pos;
- void Update()
- {
- pos=transform.position;
- }
5、主动进行垃圾回收
- void Update()
- {
- if(Time.frameCount%50==0)
- {
- System.GC.Collection();
- }
- }
6、优化数学运算,尽量避免使用float,而使用int,特别是在手机游戏中,尽量少用复杂的数学函数,比如sin,cos等函数。改除法/为乘法,例如:使用x*0.5f而不是 x/2.0f 。
7、压缩 Mesh
导入 3D 模型之后,在不影响显示效果的前提下,最好打开 Mesh Compression。 Off, Low, Medium, High 这几个选项,可酌情选取。对于单个Mesh最好使用一个材质。
8、 运行时尽量减少 Tris 和 Draw Calls
预览的时候,可点开 Stats,查看图形渲染的开销情况。特别注意 Tris 和 Draw Calls 这两个参数。 一般来说,要做到: Tris 保持在 7.5k 以下 ,Draw Calls 保持在 35 以下。
9、避免大量使用 Unity 自带的 Sphere 等内建 Mesh
Unity 内建的 Mesh,多边形的数量比较大,如果物体不要求特别圆滑,可导入其他的简单3D模型代替。
10、如果可能,将GameObject上不必要的脚本disable掉。如果你有一个大的场景在你的游戏中,并且敌方的位置在数千米意外,这是你可以disable你的敌方AI脚本直到它们接近摄像机为止。一个好的途径来开启或关闭GameObject是使用SetActiveRecursively(false),并且球形或盒型碰撞器设为trigger。
11、删除空的Update方法。当通过Assets目录创建新的脚本时,脚本里会包括一个Update方法,当你不使用时删除它。
12、引用一个游戏对象的最合乎逻辑的组件。有人可能会这样写someGameObject.transform,gameObject.rigidbody.transform.gameObject.rigidbody.transform,但是这样做了一些不必要的工作,你可以在最开始的地方引用它,像这样:
privateTransform myTrans;
void Start()
{
myTrans=transform;
}
13、协同是一个好方法。可以使用协同程序来代替不必每帧都执行的方法。(还有InvokeRepeating方法也是一个好的取代Update的方法)。
14、尽可能不要再Update或FixedUpdate中使用搜索方法(例如GameObject.Find()),你可以像前面那样在Start方法里获得它。
15、不要使用SendMessage之类的方法,他比直接调用方法慢了100倍,你可以直接调用或通过C#的委托来实现。
16、使用javascript或Boo语言时,你最好确定变量的类型,不要使用动态类型,这样会降低效率,你可以在脚本开头使用#pragmastrict 来检查,这样当你编译你的游戏时就不会出现莫名其妙的错误了。
Unity3D优化总结的更多相关文章
- unity3d优化总结篇
转自http://www.unitymanual.com/thread-21597-1-1.html 此总结由自己经验及网上收集整理优化内容 包括:1.代码方面:2.函数使用方面:3.ngui注意方面 ...
- Unity3d优化
检测方式: 一,Unity3D 渲染统计窗口 Game视窗的Stats去查看渲染统计的信息: 1.FPS fps其实就是 frames per second,也就是每一秒游戏执行的帧数,这个数值越小, ...
- unity3d优化总结篇(二)
1. 尽量避免每帧处理,可以每隔几帧处理一次 比如: [C#] 纯文本查看 复制代码 function Update() { DoSomeThing(); } 可改为每5帧处理一次: [C#] ...
- Unity3d优化总结2
优化: 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种, 每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RG ...
- Unity3d优化总结1
优化内容 包括: 1.代码方面: 2.函数使用方面: 3.ngui注意方面: 4.数学运算方面: 5.内存方面: 6.垃圾回收方面 等等... 1. 尽量避免每帧处理,可以每隔几帧处理一次 比如: ...
- 【转载】总结使用Unity3D优化游戏运行性能的经验
流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow Blade>已经将在标准iPhone和iPad设备上实现每秒60帧视为一个重要目标. 以下是我们在紧凑的优化过程中 ...
- Unity3D 优化
用UNITY开发手机游戏,背景图片和UI图片显示的比PC机上模糊非常多,怎么解决??在unity里选中资源 1.TextureType 改成 Advanced2.NonPower of 2 改成 no ...
- Unity3D 优化相关
抛砖引玉: http://www.luzexi.com/unity3d%E4%BC%98%E5%8C%96%E4%B9%8B%E8%B7%AF/ 关于图片 一.Unity3D自身会把导入的图片进行压缩 ...
- unity3d优化-代码篇(不定期更新)
1.Update 大多数情况是需要在update中处理很多逻辑的,然而unity3d底层是c/c++编写,逻辑层是c#,通过monobehaviour挂载于对象中,实现一些unity3d接口的重载. ...
随机推荐
- Sqoop使用手册
转载请注明出处:http://www.cnblogs.com/xiaodf/ 1 Sqoop概述 2 版本说明 3 驱动安装 3.1 MySQL 4 基本用法 4.1 导入 4.1.1 保护密码 4. ...
- Windows下VTK6.0.0安装详解(CMake使用说明)
操作系统:Windows7,用到工具:Visual studio.CMake. 1.准备工作 VTK下载: 下载最新VTK稳定版(6.0.0,截至2013年7月)http://www.vtk.org/ ...
- Base64简介
Base64是一种用64个字符来表示任意二进制数据的方法.首先,准备一个包含64个字符的数组:['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... ...
- 实现AJAX的异步交互的步骤
<input type="button" value="异步请求"id="btn"> <script> 实现ajax ...
- Qt错误总结
Qt时常发生的错误总结 1,代码有问题,但是它却告诉你别的地方-比头文件不能读取,贼蛋疼! 2,库文件问题,会出现一大堆错误,这个时候就要好好检查库文件了. 3,版本问题,Qt版本升级时有些东西会变化 ...
- pthread_create 内存释放
run() { pthread_attr_destroy(&m_attr); pthread_detach(pthread_self()); }
- canvas 画字
用canvas画字还是头一回,要想和UI设计的画的一模一样还是真有些苦难,不过现在实现的效果已经很像了. <!--通过字体文件引入字体--><style>@font-face ...
- HDU 5964 平行四边形
假设直线L和L'相交于原点O.假设S ={s1,s2,...,sn}是平面上的n个点.你打 算找四个点满足如下条件:1. A ∈ L 而 A' ∈ L'.2. B,B'都属于S;即 B∈S 且 ...
- clang编译器简介
本文部分内容引用: 中文维基百科. 结构化编译器前端--clang介绍. 什么是clang编译器? clang是LLVM编译器工具集的一个用于编译C.C++.Objective-C的前端.LLVM项目 ...
- 手写json
json的意思是JavaScript 对象表示法 '{"0":0,"b":[3,4,5],"c":"0","d ...