obsidian/笔记文件/2.笔记/Unity性能优化_第六章.md
2025-03-26 00:02:56 +08:00

6.2 KiB
Raw Permalink Blame History

Unity Memory Profiler

Memory Profiler可以查看游戏当前一帧具体的内存使用情况我们可以详细地看到各种东西占用了多少内存。

如果发现某样东西占用了过高的内存,则可以考虑问题是不是出在它身上,从它身上入手来进行优化。也可以分析是不是存在内存泄漏问题,即可以分析是不是某些资源一直占着内存得不到释放,才导致内存占用过高。

旧版Unity安装它的方法 Windows——Package Manager——All packages——Memory Profiler——Install 如果找不到说明它可能在当前Unity版本下是预览版可以在Advanced下拉菜单选择Show preview packages再查找它出来安装

安装方法: Edit——Project Settings——Package Manager——勾选Enable Pre-release Packages——关闭窗口——Window——Package Manager——点击左上方的+号——Add package by name——输入com.unity.memoryprofiler——点击Add 注意:下载的时候可能需要科学上网。

安装完后打开方式: Window——Analysis——Memory Profiler

点击Capture New Snapshot会创建当前这一时刻的内存快照可以看到这一帧的内存情况。它默认会存储在与Assets文件夹同级的目录的一个叫做MemoryCaptures的文件夹中。如果要修改这个路径也可以点击右上角的三点点击Open Preferences修改Memory Snapshot Storage Path的值。

Single Snapshot表示用来分析单张内存快照Compare Snapshots可以通过对比来分析两张内存快照。

选中一张内存快照后点击Tree Map可以看出各种资源和脚本所占用的内存选中其中一块可以具体地看出到底它们分别占用多少内存。如果某个名字的资源占用的内存高那么可以考虑问题是不是出在它身上这样我们就可以从它身上入手来进行优化。但是要注意有一些名字的资源可能在项目中不找到因为它们是Unity自带的资源。

在Unity编辑器中运行游戏Memory Profiler记录的内存情况可能会不准确它会把Unity编辑器的一些内存占用情况也记录进去。我们应该把游戏构建到电脑或者手机然后在电脑或者手机上运行游戏再用Memory Profiler拍内存快照来分析此时这些内存快照记录的数据才是准确的。

构建项目到电脑时应勾选Build Settings窗口的Development Build、Autoconnect Profiler这样当发布的游戏运行时就可以在Unity引擎的Memory Profiler左上角的下拉菜单选择关联刚才发布的程序拍下快照查看它的内存占用情况。

用手机数据线连接到电脑在手机上运行游戏并在电脑分析也必须勾选Build Settings窗口的Development Build、Autoconnect Profiler而且手机上应勾选“开启开发者选项”、“USB调试”、“USB安装”。当用手机数据线连接到电脑Memory Profiler左上的下拉菜单可以选择连接到电脑的手机设备。

Unity Physics Debugger窗口物理调试窗口

Physics Debugger窗口也叫物理调试窗口使用它可以在Scene窗口中查看当前场景中游戏对象的碰撞器、触发器、刚体、关节等与物理模拟相关的东西的范围。尤其是在游戏对象较多的场景中使用物理调试窗口可以方便我们观看它们的范围。

打开方法Window——Analysis——Physics Debugger

官方文档:https://docs.unity3d.com/cn/current/Manual/PhysicsDebugVisualization.html

在Scene窗口中勾选Collision Geometry则会在Scene窗口中显示游戏对象的碰撞几何体具体的情况可以在Physics Debugger窗口中查看到和修改。如果勾选Mouse Select则会开启鼠标悬停和鼠标选择功能方便查看碰撞几何体。

点击右上方的Reset可以重置Physics Debugger窗口中的设置。

Selected Object Info表示当前选中的游戏对象的信息。

Show Physics Scene表示要在哪些场景中显示碰撞几何体。

Show Layers表示哪些Layer层的游戏对象要显示碰撞几何体。

Show Static Colliders表示显示静态的碰撞器组件的范围。

Show Triggers表示显示勾选了Is Trigger属性的碰撞器的范围。

Show Rigidbodies表示显示Rigidbody组件的范围。

Show Kinematic Bodies表示显示勾选了Is Kinematic的Rigidbody组件的范围。

Show Articulation Bodies表示显示Articulation Body组件的范围。Articulation Body组件用于模拟机器人、车辆等物体的关节行为。例如可以实现机器人的动作、车辆的悬挂等物理效果。

Show Sleeping Bodies表示显示处于睡眠状态的Rigidbody组件的范围。当一个刚体在一段时间内没有受到外力作用则会自动进入睡眠状态进入睡眠状态的刚体不会参与物理模拟。当它再次受到外力的作用时它就会从睡眠状态中唤醒此时就又会重新参与物理模拟了。

Collider Types Show BoxColliders表示显示盒子碰撞器的范围。 Show SphereColliders表示显示球体碰撞器的范围。 Show CapsuleColliders表示显示胶囊体碰撞器的范围。 Show MeshColliders(convex)表示显示网格碰撞器的范围。 Show MeshColliders(concave)表示显示网格碰撞器的范围。 Show Terrain Colliders表示显示地形碰撞器的范围。

Colors Static Colliders表示显示静态的碰撞器的颜色。 Triggers表示显示勾选了Is Trigger属性的碰撞器的颜色。 Rigidbodies表示显示Rigidbody组件的颜色。 Kinematic Bodies表示显示勾选了Is Kinematic的Rigidbody组件的颜色。 Articulation Bodies表示显示Articulation Body组件的颜色。 Sleeping Bodies表示显示处于睡眠状态的Rigidbody组件的颜色。 Variation表示要显示的颜色与随机颜色混合的程度。调节这个变量会影响所有显示的几何碰撞体的颜色。

Rendering Transparency控制绘制的碰撞几何体的透明度。 Force Overdraw勾选后绘制的碰撞集合体会更加清晰。 View Distance控制能在Scene窗口中看到碰撞几何体的距离。 Terrain Tiles Max控制能在Scene窗口中看到Unity自带的地形系统Terrain的瓦片的最大数量。