![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能优化
文章平均质量分 88
Break The Sky
这个作者很懒,什么都没留下…
展开
-
Unity性能优化之内存管理的优化(内存管理性能增强之预制池)四
预制池系统首先需要知道预制池系统需要做什么:如果已经存在已回收的版本,应该重新生成第一个可用的对象如果不存在已回收的版本,应该从预制体中实例化新的GameObject在上述两种情况下, 都应该在附加到GameObject上的所有IPoolableComponent接口上调用Spawned方法必须接受请求,以回收固定GameObject如果对象由对象池系统管理,他应该禁用,并在附加到GameObject上的所有IPoolableComponent接口类上调用Despawned方法如果对象没有由原创 2022-01-13 21:11:55 · 3246 阅读 · 0 评论 -
Unity性能优化之内存管理的优化(内存管理性能增强之对象池)三
对象池谈到临时工作缓冲区,对象池是通过避免释放和重新分配,来最小化和建立对内存使用控制的一种极好的方法,其理念是为对象创建建立自己的系统,它隐藏了所得的对象是新分配的还是从之前的分配中回收的,描述这个过程的典型术语是生成和回收对象,而不是在内存中创建和删除对象,当一个对象被回收的时候,只是隐藏它,使他休眠,直到再次需要它,此时它从之前的一个已回收对象中重新生成,并且来代替可能需要新分配的对象;接下来 介绍一下对象池系统的快速实现。该系统的重要特性是允许池化对象决定当需要回收时应该如何回收。下面IPoo原创 2022-01-13 12:30:11 · 2369 阅读 · 0 评论 -
Unity性能优化之内存管理的优化(内存管理性能增强)二
上一篇将关于字符串以及值类型引用类型的性能增强大致说完,下面继续关于装箱那点事C#中的一切皆是对象,这意味着他们都继承自System.Object类,甚至int、float、bool等基本数据类型,都隐式的从System.Object中继承,每当这些值类型以处理对象的方式隐式的处理时,CLR会自动创建一个临时对象来存储或装箱内部的值,以便将其视为典型的引用类型对象,显然这将会导致堆分配,以创建包含的容器;注意:装箱和将值类型作为引用类型的成员变量不同,装箱仅在通过转化或强制转化将值类型视为引用类型的时原创 2022-01-12 13:54:45 · 2256 阅读 · 0 评论 -
Unity性能优化之内存管理的优化(内存管理性能增强)一
关于Unity的代码编译当修改了C#代码,并且从喜欢的IDE切换到Unity之后,代码会自动编译,但是C#代码没有直接转化为机器码,相反,代码转换为中间语言CIL,他是本地代码上的一种抽象,这正是.NET支持多种语言的方式——每种语言都使用不同的编译器,但是他们都会转换成CIL,因为不管选择的语言是什么,最终的输出都是一样的;在运行的时候,CIL通过Mono的虚拟机VM运行,VM是一种基础架构元素,允许相同的代码运行在不同的平台,而不需要修改代码本身,Mono虚拟机时.NET公共语言运行时(CLR)的一原创 2022-01-10 18:11:15 · 1534 阅读 · 0 评论 -
Unity性能优化之内存管理的优化(Mono平台下的内存管理)
此部分分为以下几个环节来记录Mono平台本地和托管内存域垃圾回收内存碎片IL2CPP如何分析内存问题不同内存祥光性能增强最小化垃圾回收正确使用值类型和引用类型正确使用字符串与unity引擎相关的许多潜在增强对象和预制池Mono平台Mono是一种神奇的调味汁,使Unity具有很多跨平台的功能,其目标使通过框架提供跨平台开发,该框架允许用统用的编程语言编写代码运行在不同的硬件平台上,包括 Linux、MacOS、Windows、ARM等,Mono甚至支持很多不同的编程语言,可原创 2022-01-09 11:16:54 · 1827 阅读 · 0 评论 -
Unity性能优化之图形渲染(渲染性能的加强)
上一篇博客已经讲述了关于性能瓶颈的所有信息,现在就可以根据这些信息进行针对性的性能修复了,下面将介绍一系列技术来提升CPU受限和GPU受限程序的渲染管线渲染性能问题;启用/禁用GPUSkinning第一个技巧就是通过GPUSkinning来降低CPU或者GPU前端的负载,Skinning是基于动画骨骼的房前位置变化网格顶点的过程,在CPU上工作的系统会转化对象的骨骼,用于确定其当前的姿势,但是动画过程中的下一个重要步骤是围绕这些骨骼包裹的网格顶点,将网格放在最终的姿势中,为此需要迭代每个顶点,并对连接到原创 2021-12-25 15:55:04 · 4157 阅读 · 0 评论 -
Unity性能优化之动态图形渲染
毫无疑问的,现代图形设备的管线渲染非常复杂,即使在屏幕上仅仅渲染一个最简单的三角形,也要执行大量的API,其中包含了很多任务,如:为挂接到操作系统的相机视图创建缓冲区;为顶点数据分配缓冲区;建立数据通道以将顶点和纹理数据从RAM传送到VRAM,配置这些内存空间来使用一组特定的数据格式;确定对相机可见的对象;为三角形设置并初始化DrawCall;等待渲染管线完成其任务;最后将渲染的图像显示到屏幕上;虽然绘制这样一个简单的对象方法开起来过于复杂,理由是,渲染常常需要重复这样的任务,不管是渲染复杂的任务还是简单原创 2021-12-21 17:19:57 · 2447 阅读 · 0 评论 -
Unity性能优化之物理引擎的优化(布娃娃的优化)
说到基于关节的物体,布娃娃使非常受欢迎的特性,但是即使允许多个布娃娃同时在场景中共存使非常有人的事情,但是当有太多布娃娃在运动或者与其他对象碰撞的时候,由于迭代器需要很高的迭代次数来解决这些问题,这就会带来巨大的性能损失,所以接下来讨论一下提高布娃娃性能的方法;减少关节和碰撞器Unity 在GameObject->3DObject->Ragdoll…下提供了简单的布娃娃生成工具,该工具可以从给定的对象中生成布娃娃,直接将给定对象的对应部位拖到上面既可以了这个工具通常创建13个不同的碰撞器原创 2021-12-20 16:21:26 · 1205 阅读 · 0 评论 -
Unity性能优化之物理引擎的优化(三)
继续上两篇的博客前两篇博客分别介绍了unity中物理引擎的大部分物理特性和部分优化技术用于提升游戏的物理性能,接下来继续玩完善用于提升游戏物理性能的优化技术;最小化涉嫌发射和边界体积检查所有的射线投射方法都很有用,但是他们相对于其他地方来说消耗太大,特别是CapsileCast 和SphereCast方法,应该避免在Update中定期的调用这些方法,并且只在脚本代码的管...原创 2021-12-20 15:55:03 · 2415 阅读 · 0 评论 -
Unity性能优化之物理引擎的优化(二)
继续上一篇博客上一篇博客已经讲述了unity中物理引擎的大部分物理特性,接下来介绍一些优化技术用于提升游戏的物理性能!物理性能优化场景设置缩放应该尽可能的将游戏世界的所有物理物体的缩放接近(1,1,1),默认情况下,unity假设试图模拟的游戏玩法相当于在地球表面,地球表面的重力为9.81m/s2,因此默认重力值设置为-9.81以匹配地球重力,unitu世界空间的一个单位等于1米,负号意味着他会把物体向下拉,物体的大小应该反应有效的世界尺度,因为缩放过大会导致重力移动物体的速度要比预期的慢得多,如原创 2021-12-19 21:14:28 · 972 阅读 · 0 评论 -
Unity性能优化之物理引擎的优化(一)
由于物理引擎是一类独特的子系统,其行为和一直性是影响产品质量的主要因素,因此花时间改进其行为通常是值得的;如果错过了重要的碰撞事件,游戏在计算的复杂物理事件时卡顿,或者玩家摔倒在地上,这些都将会对游戏质量产生明显的负面影响;下面将介绍减少物理迎请中的CPU峰值、开销和内存消耗的方式,在提高或者至少保持游戏质量的同时优化性能;将以如下的顺序介绍;理解Unity的物理引擎时如何工作时间步长和FixedUpdate碰撞器类型碰撞射线发射刚体激活状态物理引擎性能优化如何以优化物理行为构建原创 2021-12-19 15:59:19 · 2813 阅读 · 0 评论 -
Unity性能优化之网格和动画文件
实际上,网络和动画文件的这些文件类型是顶点和蒙皮骨骼数据的大型数组,可以通过各种技术最小化文件大小,同时缺不影响外观的相似性,与此同时,也有一些方式可以通过批处理技术降低渲染大量的这类对象组的成本;优化之路;减少多边形数量调整网格压缩恰当的使用Read-Write Enabled合并网格Asset Bundle 和Resource减少多边形数量这是最有效的提升性能的方法之一,应该始终考虑这方面的优化,事实上,由于不能使用SkinnedMesh Render对对象进行批处理,因此,这是减少原创 2021-12-18 20:28:32 · 1362 阅读 · 0 评论 -
性能优化之纹理文件的优化
游戏开发中经常混淆纹理和精灵的概念,下面来简单的区分一下纹理:纹理只是简单的图像文件,一个拥有很多颜色数据的大列表,其作用是为了告知程序,图像的每个像素应该是什么颜色;精灵:精灵是网格的2D等价物,通常只是一个四边形,(一对三角形合并成的网格),其作用是来渲染面向当前相机的平面;精灵表:另一种被称之为精灵表的事物,它是在一个纹理文件内大量独立图像的几何,通常用于包含2D动画,以上的这三种文件可以使用工具进行切分,比如,unity的sprite Atlas,用来形成角色动画帧所需要的独立纹理;网格或原创 2021-12-17 18:44:21 · 1149 阅读 · 0 评论 -
性能优化之艺术资源的优化(音频资源)
音频导入音频文件加载音频文件编码格式与品质级别音频性能加强导入音频文件在Project窗口中选中导入的音频文件的时候,Inspector窗口将显示多个导入设置,这些设置决定了加载行为、压缩行为、质量、采样率、以及是否支持双音道很多音频的导入选项中可以基于每个平台的配置,允许在不同的目标平台上进行自定义的行为加载音频文件Preload Audio Data 巨顶音频数据是在场景初始化期间自动加载还是在以后加载Load In BackGround 确定此加载活动是在完成之前阻塞主线程还原创 2021-12-16 16:05:30 · 857 阅读 · 0 评论 -
unity性能优化之批处理的优势
在某些情况下,批处理的对象指的是网格、顶点、边、UV坐标和其他用于描述3D对象的不同数据类型的大集合,当然该术语也可以简单的代表批处理音频文件、精灵、纹理文件和其他大数据的集合批处理的两种形式静态批处理动态批处理这两种方法的最本质区别就是集合体合并的两种不同的形式,用于将多个对象的网格数据合并到一起,并且在单一的指令中去渲染他们,而不是单独准备和回值每个几何体。为什么可以将多个网格进行批处理成单一的网格?Unity中并没有规定网格对象必须是3D空间中的连续集合体,并且,Rendering p原创 2021-12-14 22:11:49 · 768 阅读 · 0 评论 -
unity性能优化之关于脚本的优化与注意事项
写在前面:本文所述脚本优化就是多使用那种方式,尽量不要使用那种方式,那种方式会浪费资源,以及为什么会浪费资源,某些高效率的框架以及系统是怎样制作的使用最快的方式获得组件通常情况下,我们获取组件的方式中,最常用的方法之一就是GetComponent,但是GetComponent有几种变体,这几种变体的执行效率是不一样的,分别有GetComponent、GetComponent(string)、GetComponent(typeof(T)) ,这几种变体是有效率区别的,通过简单测试(网上也有很多测试结果)显原创 2021-12-13 15:46:35 · 2285 阅读 · 0 评论 -
Unity性能优化之unity profiler
Unity profiler 所能收集到的内容CPU消耗量(包括每一个子系统)基本、详细的渲染和GPU的信息运行时内存的分配和总消耗量音频/数据的使用情况物理引擎(2D\3D)的使用情况网络消息传递和活动情况视频回放的使用情况基本和享系的用户界面性能全局光照同继数据常用的使用profiler的方法指令注入:所谓的指令注入就是通过代码开启一个指令命名,然后在目标函数前开启,目标函数结束关闭,以此来观察目标函数的行为(后面会说到),这里面可能包括,调用次数、总共的执行时间、分配了多少原创 2021-12-11 14:44:57 · 7561 阅读 · 0 评论