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的瓦片的最大数量。