Unity | 性能优化

devtools/2024/12/22 17:34:56/

目录

一、总结Unity开发中耗时高的操作

1.资源及UI

2.场景设置

3.代码

二、堆内存

1.累积分析

(1)常见的会引起堆内存累积的Unity API:

(2)常见的会引起堆内存累积的System操作

(3)其他

2.泄露分析

三、CPU

1.瓶颈函数优化

(1)明显造成耗时的函数

(2)稍明显耗时函数

2.高频函数优化

(1)对于多个高频Update

(2)针对低频逻辑,轮循式改为事件队列

(3)针对高频逻辑,将高频访问的属性分离到单独的Array中

3.IL2CPP


一、总结Unity开发中耗时高的操作

1.资源及UI

  • 一般来说,纹理尺寸越大,占用的内存也就越大,一般情况我们推荐纹理尺寸为 512*512,如果 512*512 显示效果已经够用,那么就不要用 1024*1024 的纹理,因为后者的内存占用是前者的 4 倍。
  • 文本使用 Outline 效果会增加 4 倍的顶点数,造成较高的重建开销,可尝试用 shadow 替代。
  • 图片RGB32、RGB24 等非压缩格式的纹理占用内存较大,建议尽可能使用硬件支持的压缩纹理格式。
  • 图片Wrapmode 使用了 Repeat 模式,容易导致贴图边缘出现杂色。
  • 音频源文件为双声道且没有开启Force To Mono。在Android设备上,双声道音频意义不大,但是会占用双倍内存,建议使用单声道。
  • 音频文件Streaming 选项开启后,音频加载方式变为边播放边读取,会明显降低内存占用,一般建议背景音乐使用这种方式。
  • Read/Write 选项启用后,将会允许从脚本来访问网格数据,同时会产生网格数据的副本,占用额外内存,等同于一个网格数据会有接近2倍的内存消耗。但是对于需要使用StaticBatchingUtility.Combine进行合批的Mesh,以及部分Unity版本中粒子系统里使用到的Mesh,仍需要开启Mesh的Read/Write选项。
  • Mipmap开启后,内存会是未开启 Mipmap 的 1.33 倍,因为 Mipmap 会生成一组长宽依次减少一倍的纹理序列,一直生成到 1*1。 Mipmap 提升 GPU 效率,一般用于 3D 场景或角色,UI 不建议开启。
  • Tiled 模式的 Image 组件可能产生过多的面片。
  • 不建议使用面片数超过 500 的网格。
  • 粒子系统的Prewarm操作会在使用时的第一帧中造成相对集中的CPU耗时,很可能会造成运行时局部卡顿,建议考虑是否确实需要开启该选项,如果可以不用则将其关闭。
  • 粒子系统:不建议使用尺寸过大(256)的纹理。
  • 粒子系统建议不要开启Collison或Trigger功能,否则会有较高的物理开销。
  • ApplyRootMotion勾选后,更新动画时会将Root的运动信息应用到Animator所在的 GameObject上,会有一定的开销。一般对于主玩家这样的物体,要用动画控制人物前进 的情况下需要开启ApplyRootMotion,否则建议在ImportSettings中将动画的"Root Motion"bake到曲线中,并取消勾选ApplyRootMotion。
  • alpha=0, 且对应的Canvas Renderer组件没有开启Cull Transparent Mesh 的 Image 组件依然会参与渲染,建议进行排除。
  • Canvas下UI节点太多,会导致加载及UI重建耗时。

2.场景设置

  • 开启雾的效果,GPU 消耗提高。
  • MeshCollider 的开销较高,建议替换为简单碰撞体来简化物理碰撞的开销。
  • 接收音频的组件AudioListener正常情况只放一个。
  • Unity中开启了阴影的实时光照会对所有设置了cast shadow 的object进行实时阴 影渲染,使用forward rendering对每一个开启阴影的实时光照都会产生大量的渲染消 耗。通常推荐场景中只存在1个开启了shadow的实时光照,如需要多个光照,建议关闭 其他光照的阴影渲染。

http://www.ppmy.cn/devtools/97373.html

相关文章

理解和控制 OBS 媒体源 - 前提条件与操作

在使用 Open Broadcaster Software (OBS) 开发过程中,对媒体源进行有效控制是实现高质量直播和录制的关键。媒体控制功能,如播放、暂停和重启,都依赖于 OBS 的核心机制。本文通过深入分析 obs_source_media_restart 函数的实现细节,揭示了确保这些控制功能正常工作的前提条…

2024.08.09校招 实习 内推 面经

地/球🌍 : neituijunsir 交* 流*裙 ,内推/实习/校招汇总表格 1、校招 | 顺丰科技 2025届秋季校园招聘技术专场正式启动(内推) 校招 | 顺丰科技 2025届秋季校园招聘技术专场正式启动(内推) …

Keepalived + LVS实现高可用

1、简介 LVS和Keepalived是Linux操作系统下实现高可用的负载均衡解决方案的重要工具。通过协同工作,它们能够实现一种高性能、高可用的负载均衡服务,使得用户能够透明地访问到集群中的服务。同时,它们还提供了强大的监控和故障切换功能&#…

kafka开启kerberos

一、基本环境准备 创建票据创建Kerberos主体(Principal): 使用kadmin.local或kadmin命令为Zookeeper和Kafka服务创建Kerberos主体。例如: 注意有几台机器创建几个 kadmin.local -q "addprinc -randkey zookeeper/dshield…

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件,发现使用固态硬盘改装的U盘以及手机等设备,无法被禁止,无奈下,自己使用C#手搓了一个。 基本逻辑: 开机自启;启动时,修改注册表,禁止系统插入USB存…

微信小程序的四种弹窗使用

​ 在做小程序的过程中,弹窗也算是非常实用的功能了,这几天写的几个功能就用到了弹窗,也可能是初学者的问题,比较菜,想找一个可以带图片的自定义的弹窗,,这里简单介绍一下官方封装好的四个弹窗…

leetcode108.把升序数组转换成二叉搜索树

题目描述 [-10,-3,0,5,9] 转换成如下二叉搜索树: 解题的核心原理是:二叉搜索树的中序遍历结果是一个升序数组,所以根节点的数值,也位于数组的中部。 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return h…

设计模式实战:数据分析系统的设计与实现

在数据驱动的业务环境中,数据分析系统是决策支持的核心工具。为了构建一个高效、灵活的数据分析系统,我们可以结合多种设计模式,如策略模式、装饰模式和模板方法模式。本文将详细介绍这些模式在数据分析系统中的应用,帮助开发者设计出可扩展且易于维护的系统。 系统设计流…