Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器

这篇具有很好参考价值的文章主要介绍了Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码优化:
1. 使用AssetBundle作为资源加载方案。
而且经常一起使用的资源可以打在同一个AssetBundle包中。尽量避免同一个资源被打包进多个AB包中。压缩方式尽量使用LZ4,少用或不要用LZMA的压缩方式。如果确定后续开发不会升级Unity版本,则可以尝试启用打包选项BuildAssetBundleOption.DisableWriteType,这样TypeTree信息不会被打到AB包中,可以极大减小包体大小以及运行加载时的内存开销。
2. 使用AssetBundle或者Addressables加载的资源,如果不使用,要记得卸载它们,否则会造成内存泄漏。
不用的资源要释放掉,不用的引用类型的变量也要赋值为null,不要让它们一直占着内存中。
3. 加载资源时尽量使用异步加载。
4. 频繁创建和销毁对象,可以使用对象池。
5. 切换场景时,旧的场景要释放掉,不用的资源也可以考虑释放掉,也可以考虑用System.GC.Collect来进行一次垃圾回收。
6. 锁定游戏的帧率 。帧率为30,游戏会明显卡顿,但是对于手游来说,消耗手机的电量比较少。帧率为45,游戏有一点点卡,但还凑合,消耗电量中等。帧率为60,游戏很流畅,但消耗手机的电量会比较多。可以用Application.targetFrameRate来锁定帧率,也可以用UnityEngine.Rendering命名空间中的OnDemandRendering.renderFrameInterval来锁定帧率。
7.尽量少用foreach语句,可以改为for语句。因为每次使用foreach语句会造成微量的内存垃圾。
8.要判断GameObject型对象.tag是不是某个标签,使用GameObject型对象.CompareTag方法会更高效。
9. 尽量少用GameObject.Find方法和Object.FindObjectOfType方法来查找游戏对象,可以提前把要查找的游戏对象存储在变量、列表、字典等容器中,方便查找。也可以用GameObject.FindGameObjectWithTag方法来查找游戏对象。
10. 在UI显示字符串的时候,如果一些内容是固定的,我们可以把它拆分开来,这样可以减少使用+号来拼接的次数,减少内存垃圾的产生。例如“杀敌数:999”,其中“杀敌数:”是固定的,冒号后面的数字才是会变的,那么我们可以用两个Text组件分别记录它们,改变的时候只改变冒号后面的数字。
11.频繁对字符串赋新的值,或者频繁拼接字符串的时候,可以使用StringBuilder代替string
12. 如果要频繁操作某脚本,不要每次都用GetComponent方法来获取这些脚本。可以用一个变量存储起获得的这个脚本,之后要访问它,就直接访问这个变量即可。也可以考虑在生命周期方法Awake或者Start中声明变量来存储,之后访问这个变量即可。
13.尽量少用正则表达式。虽然正则表达式的形式看上去比较简便,但是使用它会造成一定的性能消耗,且会产生内存垃圾。
14.尽量少用LINQ语法,因为每次使用LINQ都会产生一定量的内存垃圾。
15.尽量少用Camera.main来访问主摄像机,因为每次访问它,实际上Unity都是从场景中查找它的。可以声明一个变量存储它,在生命周期方法Awake或Start中获取主摄像机的应用。
16.在Animator、Shader中使用Get方法和Set方法时,不传入字符串作为参数,而是传入哈希值。例如Animator组件可以使用Animator.StringToHash方法获得指定字符串的哈希值,再把它作为参数传入Animator组件的Get方法或Set方法中进行使用。例如Shader,则可以用Shader.PropertyToID方法来获取指定属性的ID
17.使用非分配物理API。例如使用Physics.RaycastNonAlloc方法代替Physics.RaycastAll方法,使用Physics.SphereCastNonAlloc方法代替Physics.SphereCastAll方法,以此类推。Physics2D类也有类似的方法。
18.一般情况下,整数的数学运算比浮点数的数学运算效率高,浮点数的数学运算比矢量的数学运算效率高。可以灵活运用数学的加法交换律、加法结合律、乘法交换律、乘法结合律,在保证结果不变的前提下,调整运算顺序,减少浮点数的数学运算和矢量的数学运算。
19.使用高效的算法进行计算
20.每次执行Debug.Log来打印信息会消耗极少量的性能,如果要在游戏正式发布之后不执行某些Debug.Log的语句,但又不想把这些代码删掉,则可以使用宏来禁止在游戏正式发布之后执行Deubg.Log的语句。例如使用#if语句或者Conditional特性。
21.尽量减少在生命周期方法Update、FixedUpdate、LateUpdate中的逻辑。其中有些不需要频繁执行的逻辑,可以使用协程或者Invoke方法,每隔指定的秒数执行一次或每隔指定的帧数执行一次。
22. 尽量避免频繁的装箱拆箱操作。也可以使用泛型,这样就能避免装箱拆箱。但是要注意,Lua热更新对泛型的支持不太好。
23.如果物体身上添加了刚体组件,则尽量用刚体组件的方法来移动它,而不是用Transform类的方法来移动它。
24.如果物体身上添加了CharacterController组件,则尽量用CharacterController组件的方法来移动它,而不是用Transform类的方法来移动它。同理,如果物体身上添加了刚体组件,则应尽量用刚体组件的方法来移动它,而不是用Transform类的方法来移动它。
25.应尽量避免DontDestroyOnLoad中加载的资源过多,因为它在切换场景的时候不会被释放,声明的变量以及加载的资源会一直占用着内存。我们可以考虑把一些资源不用的资源释放掉,需要的时候再加载它。
26.不使用组件可以删掉,这样可以节省一些内存。常见的有AudioSource组件、Animator组件、Animation组件等,如果它们不需要使用,则可以删掉。
27.写一个类继承AssetPostProcessor,然后定义里面特定的方法,以此来自动设置资源导入Unity之后的属性。
28.尽量避免闭包。因为闭包会产生额外的内存开销。

可以使用Unity UPR对整个项目进行性能分析,找出问题后,再手动优化它们。
Unity UPR网址:https://upr.unity.cn/instructions/desktop
其中Unity UPR中的Asset Checker能对本地的整个Unity项目进行性能分析,帮助我们找出问题。
Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器,unity,性能优化,游戏引擎,深度优先文章来源地址https://www.toymoban.com/news/detail-860844.html

到了这里,关于Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Profiler或UPR连接WebGL应用出错

    在使用Unity Build出WebGL应用进行性能测试的时候,勾选上了 Development Build和Autoconnect Profiler,分别使用Profiler和UPR进行测试   使用Profiler测试时,就收到几帧,然后就没了 使用UPR进行测试时,在网页上解析出一百帧,此时测试正常,但是好景不长   ,后续Server Speed的曲线就为

    2024年02月15日
    浏览(74)
  • 【数据结构与算法】如何对快速排序进行细节优化以及实现非递归版本的快速排序?

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,国庆长假结束了,无论是工作还是学习都该回到正轨上来了,从今天开始恢复正常的更新频率,今天为大家带来的内容是快速排序的两大优化和非递归实现 好了废话不多说,开

    2024年02月08日
    浏览(37)
  • C# 性能优化和Unity性能优化

    C# 性能优化是一个非常广泛的话题,需要从各个方面来考虑,包括算法和数据结构、编译器优化、代码优化等等。下面是一些常见的 C# 性能优化技巧: 选择正确的数据结构:C# 提供了各种不同的数据结构,例如数组、列表、字典等等。选择正确的数据结构可以大大提高代码

    2024年02月10日
    浏览(33)
  • unity开发Android,unity直接打开其他apk,并传参数;以及接收参数的方法

    一,获取参数 要在Unity中实现Android端打开另一个应用程序并传递参数,你可以使用Android的Intent机制。  在需要启动另一个应用程序的地方调用这个方法。例如,你可以在按钮点击事件中调用它: 二,unity c#获取参数 Unity中开发的应用程序被Android的另一个应用程序传递参数时

    2024年01月21日
    浏览(34)
  • Unity性能优化笔记——UI优化

    NGUI: UGUI: 元素更新方式: NGUI: UIPanel.LateUpdate 1.轮询 2.UIPanel.UpdateWidgets UGUI: Canvas.SendWillRenderCanvas 1.队列 2.m_LayoutRebuildQueue 3.m_GraphicRebuildQueue UGUI如果Canvas没有变化Canvas.SendWillRenderCanvas是完全没有开销的 处理隐藏显示元素方式 NGUI:        1.大量的SetActive(false),       2.适量

    2024年02月08日
    浏览(31)
  • Unity性能优化篇(十一) 动画优化

    1.恰当地设置Animator组件的Culling Mode。Always Animate表示如果该动画不可见,也会播放它。Cull Update Transformations表示如果该动画不可见,则不会渲染该动画,但是依然会根据该动画的播放来改变游戏对象的位置、旋转、缩放,这样是常用的选项。Cull Completely表示完全不会播放该动

    2024年03月11日
    浏览(35)
  • Unity 性能优化一:性能标准、常用工具

    推荐耗时: 性能提现到玩家直观感受,就是帧率,为了达到要求的帧率,就要控制CPU的耗时,不同类型的游戏,对帧率要求不一样。下面是推荐耗时: 推荐内存: 避免游戏闪退的重点在于控制PSS内存(实际物理内存Proportional set size)峰值。而PSS内存的大头又在于 Reserved Total中

    2024年02月15日
    浏览(31)
  • samba的性能优化以及测试

    服务器初始化脚本 init_0.1.sh windows客户端初始化脚本 1.无应答登录 2.1.samba服务镜像 版本:4.10.16 官网:https://www.samba.org/ 2.1.1初始化服务镜像 基于软件配置的默认值 smb_init_0.0.sh 2.1.2 优化服务镜像 参考: 文心一言 (baidu.com) 官方配置文件文档: smb.conf (samba.org) 网友配置文件参

    2024年03月17日
    浏览(28)
  • vite打包配置以及性能优化

    首先该安装的插件,你要安装一下吧 这三个是基本的插件,其他优化的插件下面会介绍到 vite.config.ts文件中 这是最基本的配置,当然,可以上线,但仍然有很多待优化的地方 性能优化无非就是减小打包后体积;减小http请求;加速渲染; 首先安装一个打包体积分析的插件:

    2024年02月12日
    浏览(28)
  • unity 性能优化之GPU和资源优化

    众所周知,我们在unity里编写Shader使用的HLSL/CG都是高级语言,这是为了可以书写一套Shader兼容多个平台,在unity打包的时候,它会编译成对应平台可以运行的指令,而变体则是,根据宏生成的,而打包运行时,GPU会根据你设置的宏切换这些打包出来的代码,而不是我们书写那

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包