热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

unity性能优化小结

1.人物身上少挂载组件,用一个组件触发其他类执行会更好。比如,创建人物移动的类,这个类不继承mono,然后用一个人物的组件

1.人物身上少挂载组件,用一个组件触发其他类执行会更好。

比如,创建人物移动的类,这个类不继承mono,然后用一个人物的组件(统管整个人物的组件)的update触发去触发人物移动的类的update。这样人物移动也可以做相应行为。这样可以减少人物挂载的组件。

2.少用projector的方式做投影显示。因为每个projector都会有个相机,这样会产生很多gc。无法合并dc。用面片(quad)然后用rvocontroller可以让他贴在地面上。

3.getcomponent,GetChild,find等获取性能千万不要在update或循环中做。会产生大量gc。

4.string不能直接用+来拼接,用string.format来实现

5.一些方法要经常获取就应该统一一个地方,一次性获取。减少后面获取的数量

6.字典的key不能用枚举,会有gc

7.当有没用到的widget时就应该要隐藏他,不然uipanel的update会消耗比较高。

8.所有设置能跟随qualitysettings走的话就跟随qualitysettings走,这样可以一并设置显示质量

9.不在主场景就把主场景的摄像机给关了,不在相关的页面则隐藏相关的页面

10.切换界面时并且是全屏界面时,不在当前界面的里面的uirect和camera组件都隐藏,因为可能有特效之类

11.显示不出来的shader中的pass(因为在ui上如果不写深度的话一些pass会在ui后面)就不要渲染,可以关闭该pass减少dc

12.rendertexture能用低质量的就用低质量的,比如用ARGB4444能显示正常的就不用全质量,能降采样的就降采样,因为rt一般比较可能用在摄像机的targetrendertexture里,所以本身的rt越小性能越好。而且如果之渲染纯色的话可以把rt的深度给关了

比如我只想碟一个描边过来则可以只显示纯黑色。

13.类似这样的挂载会在人物第一次加载的时候同时去加载特效fx_p_p2_aoyi_bg等。这样会导致loading.readobject的卡顿。

解决办法是改为动态加载特效,并且在bundle上改为每个人物的特效为一个bundle。单独加载,然后在加载完人物的时候隔帧加载特效,减少卡顿。

14.不需要投射阴影或接收阴影的并且场景有关照就要关闭相关设置(因为有些比较偏的物品确实没必要有阴影)

15.把放在片元着色器执行的代码放到定点着色器

16.update中的执行逻辑尽量简单,就算有复杂的情况也应该把复杂的情况缓存起来。

获取name会有gc,缓存该缓存的东西,depth一样就不去设置

这样才能0个gc

17.有一个规范的问题,没用的代码一定要移除,不然会有隐患,比如会产生gc,像下面这段的中间那句话就是没用到的,单产生了gc

18.ngui的话层级depth如果是同一个图集的话要设置成一样的数值,并且在项目开始时就要规划好哪个图集用在哪些区间。比如LTCombatHud_Atlas是1到50,人物血条是-300到-400,label字体是490到600

19.不是因为动静分离的话,panel尽量只用一个,因为不同的panel同样的图集同样的深度也是会截断的,就会产生截断的多余的dc。

20.开启多线程渲染

21.同样类型的物品如果只是颜色不一样的话就用一个白色贴图然后改颜色就可以了,原来是这样的,修改过是。这样可以合批。

22.System.IO.Path.GetFileNameWithoutExtension会有比较高的消耗,尽量不要用,比如如果要判断可以用IndexOf等尽量代替(当然也许不合理)也可以自己写一个方法代替。

23.尽量用对象池,并且对象池的原则是如果对象池没有则创建一个对象,用完放到对象池并隐藏,需要的时候再拿出来。如果需要使用多个则查看当前的特效是否隐藏,隐藏就拿出来用,如果是显示的则再创建一个,然后放到对象池。然后用lru的方式并控制对象池的上限。

24.shader尽量剔除背面

25.特效总时长要跟真实的特效播放时长一致,不然本来只需要创建一个特效的,因为还在显示则对象池就去创建了多个特效。

26.一些比较常用的特效就不要清除了,缓存起来,比如人物出场的特效,用空间换时间。

27.在一些场景如果前一个场景不能移除则应该要隐藏起来,并且相应的逻辑上的update也要return掉

28.字符串比较不用直接用==,会产生装箱而导致有gc。用compareto或者indexof

29.逻辑判断上,如果已经闯关的而又不需要创建人物的则应该把创建人物那块给退出。

 

 

 

我的优化方法:


  1. 先在pc上用profile,找耗时的函数,最好找到对象。然后根据执行的代码优化内容。
  2. 特效的优化就是优先加载好再执行,用对象池包装起来。
  3. 尽量再该界面不会有其他界面的内容再执行,比如不会有主场景的内容再执行
  4. 尽量分帧执行或分帧加载内容,均到每帧来做
  5. Ui的dc尽量减少
  6. Mesh能静态的就做静态的
  7. 材质尽量共用,才能合批
  8. 多线程渲染的开关
  9. 。。。

如有更好的方式欢迎留言告知,谢谢!!

 

 

 


推荐阅读
  • 1关于字符串相邻的两个或多个字符串字面值(引号引起来的字符)将会自动连接到一起:str_catpython!str_cat输出:python!把很长 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
author-avatar
zc163com
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有