[Unity] Unity性能优化之代码优化小技巧

查看:450 |回复:268 | 2024-10-11 23:21:08

您需要 登录 才可以下载或查看,没有账号?注册

x
本文参与“Unity性能优化”有奖征文活动,活动详情请点击:Unity文章有奖征集第一期:性能优化。


Snipaste_2018-09-01_17-16-54.jpg
对于Unity性能优化,目前接触到的大概有这几个方面:

1. Draw Call;

2. 资源(模型、贴图、粒子);

3. 渲染(相机、光照、Shader);

4. 网络;

5. 代码(代码编写、资源加载、物理系统)。

可以在Unity自带的Profiler窗口查看项目性能消耗主要在哪几个地方,然后有针对性的进行优化。

作为一个程序,这里跟大家分享一下最近常用到代码方面的一点技巧,如有不足之处,欢迎大大们提出宝贵意见~

1. 在场景中有大量物体频繁的激活或隐藏时,不使用SetActive(),在需要隐藏时移到屏幕外 ,显示时再移到屏幕内,即修改transform.position。还有一个方法,把需要隐藏的物体设为一个已隐藏的物体的子物体,因为父物体是未激活状态,子物体会自动隐藏,不过这种方法消耗与SetActive()差不多,不推荐使用。

下面是测试代码:

141841scvviviziqdi6q3w.jpg

输出结果:


SetActive(true)消耗最大,SetActive(false)与transform.parent其次,transform.position消耗最小,占用的时间可以忽略不计。

2. 动态实例化到场景的物体,名字都会有一个后缀(Clone),有时候为了方便识别,会修改其名字,同样会产生性能消耗。比如:



3. 在不影响正常运行结果的情况下,减少Update或FixUpdate的调用次数

假设现在将所有的Updata刷新逻辑写在DoUpdata中。


3.1 每隔一定数量帧,执行一次DoUpdata。


3.2 使用协程While(true)循环,每次循环间隔一定时间,调用DoUpdata,需要在Start函数中开启协程。


3.3 使用InvokeRepeating循环调用DoUpdata。


4. 使用对象池

操作目标相对较少,可简化对象池,实现效果。


4.1 简化一


4.2 简化二


如果目标对象较多,就需要写一个正经的对象池了。

5. 音效播放时,为避免频繁创建、销毁播放器,可以对音效统一管理。

6. 场景中经常需要动态生成GameObject,当一次创建的数量较多时,在不影响使用的情况下,可以使用协程,在多帧内完成创建。

7. 部分简单的物理计算可以不使用Unity提供的物理系统,简化物理计算量。

8. 选择合理的数据结构存储数据。


9. 其他

9.1 尽量避免在Update和for循环内创建临时变量。

9.2 尽量避免创建临时字符串。

9.3 可以使用for循环的情况,就不用foreach。

9.4 每个继承MonoBehaviour的类,都会自动生成Update方法,但很多类是用不到Update的,这时候需要将其删除,毕竟实时调用空方法,多少还是有消耗的。

9.5 数值计算中使用乘法而不用触发,比如 a / 2, 可以写成 a * 0.5f。

9.6 比较他Tag值时,使用if(gameObject.CompareTag("Tag")),而不是if(gameObject.tag == "Tag")。

9.7 开发过程中会各种Debug,这也会有一定的消耗,可以对Debug进行封装,设置一个bool值,不过这样console面板双击不会跳转到调用Debug的代码行,最好的做法是将其做成dll文件。

关于Unity性能优化中的代码优化技巧暂时就想到了这么多,期待大大们补充。

via: 游戏扶持by腾讯游戏学院

2024-10-11 23:21:08  
 赞 赞 2

使用道具 登录

268个回答,把该问题分享到群,邀请大神一起回答。
2#
感谢分享
回复 收起回复
2018-9-28 10:08:32   回复
 赞 赞 2

使用道具 登录

3#
欧润欧润欧润!~~
回复 收起回复
2018-10-10 08:44:57   回复
 赞 赞 2

使用道具 登录

4#
不错的命题
回复 收起回复
2018-10-14 13:51:18   回复
 赞 赞 2

使用道具 登录

5#
感谢大神
回复 收起回复
2018-10-14 14:28:37   回复
 赞 赞 2

使用道具 登录

6#
感谢分享
回复 收起回复
2018-10-14 14:29:26   回复
 赞 赞 2

使用道具 登录

7#
导弹
回复 收起回复
2018-10-14 16:11:57   回复
 赞 赞 2

使用道具 登录

8#
hh
回复 收起回复
2018-10-14 16:50:02   回复
 赞 赞 2

使用道具 登录

9#
不错,谢谢分享
回复 收起回复
2018-10-15 06:51:37   回复
 赞 赞 2

使用道具 登录

10#
收到 给力给力222222222222222222222222333333333333333
回复 收起回复
2018-10-15 08:27:49   回复
 赞 赞 2

使用道具 登录

11#
怎么摇奖又要做任务了?
回复 收起回复
2018-10-15 08:36:46   回复
 赞 赞 2

使用道具 登录

12#
感谢楼主分享。。
回复 收起回复
2018-10-15 08:39:40   回复
 赞 赞 2

使用道具 登录

13#
感谢分享!
回复 收起回复
2018-10-15 08:41:00   回复
 赞 赞 2

使用道具 登录

14#
感谢
回复 收起回复
2018-10-15 08:44:16   回复
 赞 赞 2

使用道具 登录

15#
学习学习
回复 收起回复
2018-10-15 09:01:13   回复
 赞 赞 2

使用道具 登录

16#
感谢分享!
回复 收起回复
2018-10-15 09:01:33   回复
 赞 赞 2

使用道具 登录

17#
sadawwds
回复 收起回复
2018-10-15 09:04:23   回复
 赞 赞 2

使用道具 登录

18#

感谢分享!
回复 收起回复
2018-10-15 09:06:07   回复
 赞 赞 2

使用道具 登录

19#
漂亮的资源
回复 收起回复
2018-10-15 09:18:34   回复
 赞 赞 2

使用道具 登录

20#

资源甚好,发帖艰辛,且阅且珍惜!
回复 收起回复
2018-10-15 09:19:57   回复
 赞 赞 2

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表