《Unity游戏优化》
文章平均质量分 89
llhswwha
这个作者很懒,什么都没留下…
展开
-
《Unity游戏优化》笔记(17)[21/03/18_周四][237_]
前3天看了一下淘宝上购买的视频教程,书本的内容已经都包括了,一般来说还是书本比较详细,但是时间不足的情况下,看视频效率更高。8.4.15 预制池前面的对象池方案对于传统C#对象非常有用,但不适用于GameObject和MonoBehaviour等专门的Unity对象。这些对象往往会占用大量运动时内存,当创建和销毁它们时,会消耗大量CPU,在运行时还可能导致大量垃圾回收。我们的目标是将绝大多数对象的实例化推到场景初始化时进行,而不是让他们在运行时创建。这可以节省大量运行时CPU,并避免由于对象创建原创 2021-03-18 11:40:27 · 255 阅读 · 0 评论 -
《Unity游戏优化》笔记(16)[21/03/13_周六][201_236]
第8章 掌握内存管理不必要的内存分配由于过高的垃圾回收(消耗宝贵的CPU时间)将导致糟糕的用户体验,而内存泄漏将导致崩溃。这些情况在现代游戏的版本中是不能接受的。如果长期脱离底层问题,可能导致潜在的灾难。理解内存分配和c#语言特性在做什么,它们如何与Mono平台交互以及Mono如何与底层的Unity引擎交互,绝对是编写高质量、高效脚本代码的关键。本章学习:Mono平台、C#语言、IL2CPP以及.NET Framework。8.1 Mono平台Mono是一个开业项目,它基于API、规原创 2021-03-13 09:45:30 · 260 阅读 · 0 评论 -
《Unity游戏优化》笔记(15)[21/03/12_周五][170_188][第6章完_第7章完]
6.3.8 优化Unity UI1.使用更多画布画布组件的主要任务是管理在层次窗口中绘制UI元素的网格,并在发出渲染这些元素所需的DrawCall。画布的另一个重要作用是将网格合并进行批处理(条件是这些网格的材质相同),以降低DrawCall数。然而,当画布或其子对象发生变动时,这称为”画布污染“。当画布污染后,就需要为画布上的所有UI对象重新生成网格,才可发出DrawCall。只有很少变动(如更改UI元素的颜色)不会找出画布污染。一个常见的错误是在单个画布中构建整个游戏的UI并保持这种原创 2021-03-12 10:28:52 · 298 阅读 · 0 评论 -
《Unity游戏优化》笔记(14)[21/03/11_周四][160_170]
各种事情啊,计划总是跟不上。目录6.2 性能检测问题6.2.1 分析渲染问题6.2.2 暴力测试6.3 渲染性能的增强6.3.1 启用/禁用 GPU Skinning6.3.2 降低几何复杂度6.3.3 减少曲面细分6.3.4 应用GPU实例化6.3.5 使用基于网格的LOD6.3.6 使用遮挡剔除6.3.7 优化粒子系统6.2 性能检测问题6.2.1 分析渲染问题1.CPU瓶颈测试:在不采用批处理和阴影技术的情况下,创建成千个简单的立方体对象。原创 2021-03-12 08:33:58 · 170 阅读 · 0 评论 -
《Unity游戏优化》笔记(13)[21/03/10_周三][149_160]
第6章 动态图形现代图形设备的渲染管线相当复杂。即使在屏幕上渲染一个三角形,也需要执行大量的图形API调用,其中包括许多任务。本章学习如何收集正确的数据,深入了解管线渲染,并探索各种解决方案和解决大量潜在问题的方法。6.1 渲染管线在确定GPU瓶颈的过程中,可能需要采用一些猜测或过程排除法查找原因。CPU的命令放入“命令缓冲区“(CommandBuffer)的队列,GPU逐一处理。只要GPU能在下一帧之前跟上指令的速度和复杂度,帧速就保持不变。然而,如果GPU跟不上,或者CPU花费太多时原创 2021-03-10 10:46:46 · 170 阅读 · 0 评论 -
《Unity游戏优化》笔记(12)[21/03/09_周二][132_148][第5章完]
5.2 物理优化5.2.1 场景设置1.缩放应该尽可能地使游戏世界中所有物理物体的缩放接近(1,1,1)。Unity世界空间中的1个单位等于1米。物体大小应该反映有效的世界尺度,因为缩放过大会导致重力移动物体的速度比预期的要慢得多。重力参数设置:任何浮点运算再数值接近0时都会更精确。再项目早期,应该导入与缩放最常见的物理对象,使其比例值为(1,1,1),然后调整合适的重力值。这将再引入新对象时提供一个参考点。2.位置保持所有对象在世界空间的位置接近(0,0,0),原创 2021-03-09 12:09:13 · 253 阅读 · 0 评论 -
《Unity游戏优化》笔记(11)[21/03/08_周一][126_132]
目录5.1.2 静态碰撞器和动态碰撞器5.1.3 碰撞检测5.1.4 碰撞器类型5.1.5 碰撞矩阵5.1.6 Rigidbody激活和休眠状态5.1.7 射线和对象投射5.1.8 调试物理5.1.2 静态碰撞器和动态碰撞器动态碰撞器只意味着GameObject包含Collider组件和Rigidbody组件,如果一个动态碰撞器与另一个碰撞器发生碰撞,它们都会基于牛顿运动定律做出反应。没有Rigidbody组件的碰撞器,称为静态碰撞器。这种碰撞器有效地起到了无形屏障的原创 2021-03-08 16:49:50 · 975 阅读 · 0 评论 -
《Unity游戏优化》笔记(10)[21/02/11_周四][121_125]
第5章 加速物理目前为止,讨论的增强建议集中在降低资源消耗和避免发生帧率问题。如果错过了重要的碰撞事件,游戏在计算的复杂物理事件时会卡顿,或者玩家摔倒在地上,这些都将对游戏质量产生明显的负面影响。有些游戏可能根本不使用物理,而另一些游戏则要求物理引擎在游戏期间处理大量任务。本章介绍减少Unity物理引擎中的CPU峰值、开销和内存消耗的方法,同时包括改变物理行为的方法,在提高或至少保持游戏质量的同时优化性能。内容:理解Unity的物理引擎如何工作时间步长和FixedUdpdate原创 2021-02-12 22:33:44 · 135 阅读 · 0 评论 -
《Unity游戏优化》笔记(9)[21/02/10_周三][P116_120_第4章]
目录4.3 网格和动画文件 (P116)4.3.1 减少多边形数量4.3.2 调整网格压缩4.3.3 恰当使用Read-Write Enabled4.3.4 考虑烘焙动画4.3.5 合并网格4.4 Asset Bundle和Resource (P119)4.5 本章小结 (P120)4.3 网格和动画文件 (P116)网格和动画文件其实是顶点和蒙皮骨骼数据的大型数组,可以应用各种技术最小化文件大小,同时使其外观相似,却不完全相同。也有一些方式可以通过批处理技术降低渲染原创 2021-02-10 16:10:55 · 150 阅读 · 0 评论 -
《Unity游戏优化》笔记(8)[21/02/09_周二][P97_115]
第4章 着手处理艺术资源有一些变通方法能用于实现性能提升,但是这些方法往往会为了提高速度而降低质量。无论是试图最小化运行时的内存占用,保持尽可能小的可执行文件大小,最大限度地提高加载速度,还是保持帧速率的一致性,都有许多选项可供探索。本章探索入如何提高下列资源类型的性能:音频文件 纹理文件 网格和动画文件 AssetBundle和Resource对于每个资源类型,我们将研究Unity在应用程序的构建和运行时如何存储、加载和维护这些资源,将解释在面对性能问题时的观念,以及如何避免可能产原创 2021-02-09 12:56:22 · 356 阅读 · 0 评论 -
《Unity游戏优化》笔记(7)[21/02/08_周一][P81_96_第3章]
第3章 批处理的优势在3D图形和游戏中,批处理是一个非常通用的术语,它描述了将大量任意数据块组合在一起并将它们作为单个大数据块进行处理的过程。这对于CPU,特别是GPU是非常理想的,因为它可以使用多个内核同时处理多个任务。在内存中的不同位置来回切换内核是需要时间的,因此切换内核所花的时间越少越好。在某些情况下,批处理的对象指的是网格、顶点、边、UV坐标和其他用于描述3D对象的不同数据类型的大集合。然后,该术语也可以简单代表批处理音频文件、精灵、纹理文件和其他大数据集的行为。为了避免混淆,本文提到原创 2021-02-07 21:45:27 · 194 阅读 · 0 评论 -
《Unity游戏优化》笔记(6)[21/02/07_周日][P69_80_第2章]
2.12 禁用未使用的脚本和对象场景有时会变得非常繁忙,特别是构建大型的、开放的世界时。在Update回调中,调用代码的对象越多,它的伸缩性就越差,游戏也越慢。2.12.1 通过可见性禁用对象OnBecameVisible()OnBecameInvisible()这里得测试一下,这两个什么情况下触发。请注意,Unity还计算Scene窗口对这两个回调隐藏的摄像头数。如果发现在播放模式测试期间,这些方法没有被正确调用,请确保将Scene窗口的摄像机背对所有对象,或完全禁用Scene窗口原创 2021-02-07 12:43:10 · 198 阅读 · 0 评论 -
《Unity游戏优化》笔记(5)[21/02/06_周六][P46-69][消息系统]
目录2.11 避免运行时使用Find()和SendMessage()方法2.11.1 将引用分配给预先存在的对象2.11.2 静态类2.11.3 单例组件2.11 避免运行时使用Find()和SendMessage()方法 (P46)众所周知,SendMessage()方法和GameObject.Find()方法非常昂贵,应该不惜一切代码避免使用。找到一个可靠和快速的方法,让新对象查找场景中的现有的对象,而不需要使用find()方法,以便最小化复杂性和性能成本。将引用分.原创 2021-02-06 15:37:10 · 268 阅读 · 0 评论 -
《Unity游戏优化》笔记(1)[21/02/02_周二][P15]
shader学习好了,开始优化的学习,这个是现在工作息息相关的,碰到瓶颈了,把基础过一遍。内容是学习并掌握《Unity游戏优化》(第二版)的知识。--------------------------------《Unity Game Optimization - Third Edition》购买地址:https://www.packtpub.com/product/unity-game-optimization-third-edition/9781838556518PDF下载:https:/原创 2021-01-30 14:29:50 · 448 阅读 · 0 评论 -
《Unity游戏优化》笔记(4)[21/02/05_周五][P29_46]
第2章 脚本策略本章探索将性能优化应用于下述领域的方式:访问组件组件回调(Update()、Awake()等)协程GameObject和Transform的使用对象间通信数学计算场景和预制加载等的反序列化2.1 使用最快的方法获取组件GetComponent(string),GetComponent<T>(),GetComponent(typeof(T))最好使用GetComponent<T>()测试验证,100万次,6413ms,原创 2021-02-05 23:49:07 · 185 阅读 · 0 评论 -
《Unity游戏优化》笔记(3)[21/02/04_周四][P27_第1章]
1.2.7 代码片段的针对性分析需要进一步分析的实际问题需求确定问题是否可以重现,在什么情况下出现性能瓶颈,以及问题代码块中问题的确切来源。分析任务有用的技术从脚本代码控制Profiler 自定义定时和日志记录方法1.Profiler脚本控制可以通过Profiler类在脚本代码中控制Profiler。最重要的方法是在运行时激活和禁用分析功能的分隔符方法,BeginSample()和EndSample()。分隔符方法仅在开发构建过程中编译,这通常称为非操作或非操作代码。2.自定原创 2021-02-04 08:37:42 · 382 阅读 · 0 评论 -
《Unity游戏优化》笔记(2)[21/02/03_周三][P20]
请假回老家过年了。1.2 性能分析的最佳方法良好的代码实践和项目资源管理通常使性能问题的根源查找变得相对简单,唯一的真正问题是如何改进代码。许多代码并不总是以最干净的方式编写,我们肯定要时不时地分析较差的代码。有时被迫为了速度而实现一个笨拙的解决方案,我们并不总是有时间回去重构所有代码,以遵循最佳实践。实际上,以性能优化的名义所做的许多代码更改往往显得非常奇怪或晦涩难懂,常使代码库更难阅读。软件开发的通用目标是使代码简洁,功能丰富且快速。实现3个几乎不可能的。我们的目标是使用基准分析来观原创 2021-02-03 20:03:15 · 176 阅读 · 0 评论