Unity3D优化总结

1、在使用数组或ArrayList对象时应当注意


1 length=myArray.Length;
2
3 for(int i=0;i<length;i++)
4
5 {
6
7 }  

避免

[csharp] view plaincopy

1 for(int i=0;i<myArray.Length;i++)  {

4

}

2、如果没有必要每帧都处理,则可以每隔几帧处理一次

[csharp] view plaincopy

  1. void Update(){ if(Time.frameCount%6==0) { DoSomething(); }}

3、定时重复调用可以使用InvokeRepeating函数实现,比如,启动0.5秒后每隔1秒执行一次 DoSomeThing 函数:

[csharp] view plaincopy

  1. void Start()
  2. {
  3. InvokeRepeating("DoSomeThing", 0.5f, 1.0f);
  4. }

4、少使用临时变量,特别是在Update OnGUI等实时调用的函数中。

[csharp] view plaincopy

  1. void Update()
  2. {
  3. Vector3 pos;
  4. pos=transform.position;
  5. }

可以改为:

[csharp] view plaincopy

  1. private Vector3 pos;
  2. void Update()
  3. {
  4. pos=transform.position;
  5. }

5、主动进行垃圾回收

[csharp] view plaincopy

  1. void Update()
  2. {
  3. if(Time.frameCount%50==0)
  4. {
  5. System.GC.Collection();
  6. }
  7. }

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 来检查,这样当你编译你的游戏时就不会出现莫名其妙的错误了。

时间: 2024-11-10 12:31:57

Unity3D优化总结的相关文章

unity3d优化IOS

1. using UnityEngine; class GarbageCollectManager : MonoBehaviour { public int frameFreq = 30; void Update()   { if (Time.frameCount % frameFreq == 0) System.GC.Collect(); } 2. 使用Strict 在你全部脚本的顶部使用 #pragma ,脚本将是强类型的,避免写代码的时候错误的类型赋值. 避免Object.Instanti

Unity3d优化之路

Unity3d优化之路.U3D的架构部分已经讲了很多了,这里我想讲讲对于U3D优化的亲身体验. 优化之路分三块: 一.渲染级别. GUI部分:我使用的是NGUI,它对动态移动.旋转.缩放GUI支持的是比较差的,所以我尽量不要把过多的移动旋转缩放的部分写在GUI中,但很多情况下是避免不了的,比如:大量的伤害数字,物品掉落,图标的移动和旋转等,为了不让GUI去控制这些渲染物体,一小部分我使用3D面片代替,而大部分使用程序去生成面片渲染脱离了GUI的控制.另外在那些静态的GUI中,我使用了静态物体优化

【整理】unity3d优化总结篇

对项目优化有很多,如:mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等,现在继续补上,该内容为本人经验以及网上收集整理,希望大家有更好的优化方法,能够继续跟帖,一起探讨,共同进步. 优化: 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit. 3. 减少FPS,在ProjectSe

Unity3D优化技巧系列五

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 架构设计也是优化的一种,一款游戏如果没有一个好的架构,程序出现问题很难做到及时的响应,读者可以试想一下,如果编程的时候只是为了实现功能而实现功能,到头来就是代码越写越乱,各种功能交织

unity3d优化总结篇

转自http://www.unitymanual.com/thread-21597-1-1.html 此总结由自己经验及网上收集整理优化内容 包括:1.代码方面:2.函数使用方面:3.ngui注意方面:4.数学运算方面:5.内存方面:6.垃圾回收方面 等等...本着相互交流 共同进步的原则 好了,总结如下: 1. 尽量避免每帧处理,可以每隔几帧处理一次 比如: [C#] 纯文本查看 复制代码 function Update() { DoSomeThing(); } 可改为每5帧处理一次: [C#

【转载】总结使用Unity3D优化游戏运行性能的经验

流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow Blade>已经将在标准iPhone和iPad设备上实现每秒60帧视为一个重要目标. 以下是我们在紧凑的优化过程中提升游戏运行性能,并实现目标帧率时需要考虑的事项. 当基本游戏功能到位时,就要确保游戏运行表现能够达标.我们衡量游戏运行表现的一个基本工具是Unity内置分析器以及Xcode分析工具.使用Unity分析器来分析设备上的运行代码真是一项宝贵的功能. 我们总结了这种为将目标设备的帧率控制在60fps而进行衡量.调

unity3d优化总结篇 (难度3 推荐5)

原文地址: http://www.cnblogs.com/harlan1009/p/3970584.html 优化: 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit. 3. 减少FPS,在ProjectSetting-> Quality中的VSync Count 参数会影响你的FPS,EveryVBlank相当于

Unity3d优化

检测方式: 一,Unity3D 渲染统计窗口 Game视窗的Stats去查看渲染统计的信息: 1.FPS fps其实就是 frames per second,也就是每一秒游戏执行的帧数,这个数值越小,说明游戏越卡. 2.Draw calls batching之后渲染mesh的数量,和当前渲染到的网格的材质球数量有关. 3.Saved by batching 渲染的批处理数量,这是引擎将多个对象的绘制进行合并从而减少GPU的开销; 很多GUI插件的一个好处就是合并多个对象的渲染,从而降低DrawC

Unity3D优化技巧系列七

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144. 上篇博客实现了LoginState的封装,其实作为UI的各个窗口,每个窗口都对应着自己的State也就是状态类.这么多状态类,不能鼓孤立的存在着,它也需要我们封装一个状态管理类去处

Unity3D优化技巧系列八

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 下面给读者讲解在游戏开发中经常使用的FSM有限状态机的实现,有限状态机在状态切换中使用的非常多,比如足球游戏,动作游戏等.角色在游戏场景中经常需要动作的切换,比如Idle,Run,A