Unity3d程序方面的细节及优化

关于Unity3d程序方面的细节及优化

(基于移动开发)

1、每次创建的脚本对于用不到的Start(),.Update()函数都可以删除掉,尤其后者,即使什么都不做也会在更新。

2、不要做复杂的数学运算,比如开方运算Mathf.Sqrt()等,当我们求两个对象的距离的时候,可以直接自己计算求开方根上一级的运算。求三角函数也算复杂运算。

3、如果使用的Mono编辑器,在注释的时候,尽量采用英文注释(防止中文乱码)

4、Unity的每个component都在更新,脚本也算组件,所以一个对象不同的脚本,功能相近的可以放在一个脚本里,减少脚本组件。

5、有些组件没必要每帧都查找,拷贝,索引,完全可以自定义组件缓存,在代码开始的时候,比如transform....,GameObject.Find.....等,可以建立一个缓存或则缓存组,放在Start()函数里面。所以要谨慎的使用Unity API

6、一个脚本的编译顺序,Awake()——Start()——FixedUpdate()——Update()——LateUpdate(),对于这种顺序,要决定事情的顺序,比如生成对象,和查找对象的组件,这个时候,就要先生成在查找。

7、项目可以每到一个阶段,用性能检测器检查下性能,看看哪里需要修改,提前修改可以减少后期的优化。

8、Struct比class运行的更快。前者处于stack,后者处于heap。

9  多采用静态类型,可以提高速度。

10、在FixedUpdate()里处理物体更新的时候,对于非动作类游戏,或则没必要每帧都要更新,可以多帧更新一次。Time.framCount % 10......

11、For循环比foreach循环好用。

12、Int 比float 好,所以没必要所有数据都采用float。根据实际情况采用。

13、没有必要的字符串连接,尽量移除掉,也可以整合成一个字符串,否则会留下大量的内存垃圾。大概4个连接字符串就比一个字符串多出1kb内存垃圾。

14、If(go.CompareTag(“”))比if(go.tag==””)好,原理在与CompareTag匹配一地个字符串不相同的时候就会立刻返回false结果。

15、使用细节层次,关闭不再所感受到的功能。例如,将远处的敌人AI关闭,远去的时候,物理碰撞机也可以关闭,粒子系统也可以关闭。即最能提高性能的办法就是什么都不做。

16、最小化碰撞检测,列如ray cast,尽量从每次检查中获得更多的信息。

17、减少角色控制器移动命令的调用,可以缓存每帧的移动请求。

18、类似获取数组和数组列表的长度,应该在初始的时候获取长度,不要在更新函数里循环计算他的长度。

19、减少临时变量的使用,每次更新都会分配空间。

20、不要轻易改变公有数组的名字。

21、OnBecameVisible()当可见的时候,调用这个函数;

OnBecameInvisible()当相机不可见的时候调用这个函数;可用与一些特效等独立物体的代码。

22、关于组件查找,最好放在Awake()函数里,或则放在Start()函数最开头的位置,防止出现找不到相应组件,这是代码顺序造成的结果。

23、关于GUI.matrix矩阵来控制GUI分辨率适应,ui不能使用Screen自带宽高来控制,使用绝对尺寸才有效。

时间: 2024-10-09 03:30:27

Unity3d程序方面的细节及优化的相关文章

面向.Net程序员的后端性能优化实战

最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一.业务逻辑优化 二.DB优化 三.数据处理优化 四.锁与性能 五.cpu飙高小结 六.crash现象分析 业务逻辑优化 这一条不具有普遍性 不同的业务不同的场景 如果归纳起来 就是在不影响业务的前提下进行流程精简 1. 废弃冗余逻辑 常见于各种基于数据库的检查 很多同学在维护别人代码的时候 没有深入

Unity3d插件SmoothMoves加载速度优化

我们游戏是使用Unity3d做的2D游戏,角色特效等都使用SmoothMoves来制作(在国内估计也算奇葩一朵吧,据说燃烧的蔬菜也是SmoothMoves作的),游戏中的所有的资源--角色.特效.技能ICON.角色ICON.音效等几乎都使用assetbundles来实现. 问题:加载一场战斗的时间大概要30s左右!!! 解决方案关键字:依赖打包.数据块共享.冗余数据剔除 优化后:5s左右 :) 1. 依赖打包 1.1 使用AssetDatabase.GetDependencies()接口可以查看

unity3D总结的一些细节,不注意有些要折腾非常多天!

1. 注意!!ps保存图片时,若保存为ps格式,若关闭最大兼容将会导致unity导入失败!(n天) 2.switch 推断NGUI popuplist传来的value字符串时一定要trim一下去掉空格! 3. 获取子物体时,方法不同得到的结果不同! foreach(Transform tr in transform) 返回的是下一级子物体,通俗点就是"儿子". Transform []  allModel = GetComponentsInChildren<Transform&g

模型及贴图的细节及优化

关于模型及贴图的细节及优化 (移动开发) 1.对于静态物体,控制网格数,一般在500以下,不要添加动画组件. 2.题图尽量不要超过1024,不同的模型,可以的话,尽量用一个贴图上,一个材质球,一个网格.贴图的拼合有助于提高渲染效率. 3.对于动态物体,比如主角,敌人,尽量把面片控制在300-2000之间. 4.对于贴图格式,如果需要Alpha通道的,可以用png,或则tga格式,如果没有的话,可以采用jpg方便压缩.Mipmap可以提高效率. 5.UV尽量画在0~1之间,这样可以不用导入的时候在

Unity3D 程序打包报错(程序是连接数据库进行处理的)

打包这个Unity3D的程序时出现错误(程序是由XML数据改成连接数据库): ArgumentException: The Assembly System.Configuration is referenced by System.Data. But the dll is not allowed to be included or could not be found. UnityEditor.AssemblyHelper.AddReferencedAssembliesRecurse (Syst

[学习笔记] 应用程序构建内部细节

本文地址: http://blog.csdn.net/sushengmiyan/article/details/38316829 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站:http://do

NET程序的性能要领和优化建议

前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NET Framework Tips>.这篇文章是一个14页的pdf,当时我是在地铁上在Lumia手机上看的,觉得很是不错,这里也建议大家直接下载阅读原文,我这里试着翻译一下,以加深自己印象,后面也有一些思考,以下是原文内容: ----------------------------------------

【扣丁学堂】程序员:细节决定成败

每日一课:扣丁学堂 你知道在线教育吗?你知道在哪可以学到更多更丰富的互联网专业知识吗? 没错,扣丁学堂可以带给你更快捷更方便的学习体验,让你快速跻身互联网专业领域,实现年薪十万的梦想. 下面,扣丁将会带你走进IT行业,浅谈成为优秀程序员应该养成的习惯. 首先,所有的程序都需要某种形式的日志记录建立在它们之上,以便我们可以观察到它正在做什么.这尤其在程序出错时就显得非常重要.一个优秀的程序员和一个糟糕的程序员之间的一个不同之处是一个优秀的程序员会增加日志或其他工具以便在程序失败时方便调试. 当程序

微信小程序开发注意事项(优化项)

最近公司有一个小程序开发项目,自己也自学了不少,有一些开发小心得,记录在这里. 小程序开发中注意: 1,setData 小程序视图层和逻辑层在两个独立的模块,并不具备数据直接传递的,setData相当于他们的桥梁.常见的setData操作错误有三种. (1),频繁的去setData:在开发过程中,尽量少的去setData,大量的setData数据会导致页面卡顿或下拉延时等. (2),setData大量新数据:我们从setData底层可知,每次setData都会生成一个脚本,数据量大会导致脚本的编