目录

一、Unity中的Debug类

二、异常清单

三、面板介绍

音频部分(Audio - Suspended)

图形部分(Graphics)


一、Unity中的Debug类


Debug类提供了一系列方法用于调试和输出信息,仅在开发版本生效,发布时会被移除。

1.日志输出


Debug.Log(message)
输出普通日志(白色),用于跟踪程序流程。

Debug.Log("角色已移动至目标点");

Debug.LogWarning(message)
输出警告(黄色),提示潜在问题。

if (health <= 0) Debug.LogWarning("生命值不应为负数");

Debug.LogError(message)
输出错误(红色),标识严重问题。

if (player == null) Debug.LogError("玩家对象未初始化");

2.断言检查


Debug.Assert(condition, message)
条件为false时触发错误,用于验证假设。

Debug.Assert(enemy != null, "敌人对象未初始化");

3.图形辅助


Debug.DrawLine(start, end, color, duration)
在场景中绘制线段,用于可视化路径或距离。

Debug.DrawLine(transform.position, target.position, Color.red, 2f);


Debug.DrawRay(start, direction, color, duration)
绘制射线,常用于检测碰撞或方向。

Debug.DrawRay(transform.position, transform.forward * 10, Color.blue);

注意:上述两个方法都只能绘制线,但是不会返回任何信息,仅视觉作用 

4.调试控制
Debug.Break()
        暂停编辑器,方便检查当前状态。当代码执行到 Debug.Break() 时,Unity 编辑器会立即暂停(相当于手动点击工具栏的 暂停),冻结游戏时间轴。主要是用于指定内容执行完你想暂停查看才会使用,再点击上面的暂停结束就会恢复。

二、异常清单

异常类型 触发场景 示例代码(主动抛出) 处理建议
NullReferenceException 访问未初始化或已销毁的对象。 csharp<br>if (obj == null) <br> throw new NullReferenceException("对象未初始化");<br> 检查对象是否赋值,使用 null 判断或 [SerializeField] 确保引用有效。
MissingReferenceException 访问已被 Destroy() 销毁的 Unity 对象。 csharp<br>if (destroyedObj == null) <br> throw new MissingReferenceException("对象已被销毁");<br> 销毁对象后置为 null,或在访问前检查 GameObject 是否存在。
MissingComponentException 试图获取不存在的组件。 csharp<br>var rb = GetComponent<Rigidbody>();<br>if (rb == null) <br> throw new MissingComponentException("缺少 Rigidbody 组件");<br> 使用 GetComponent 时添加 null 检查,或用 [RequireComponent] 属性。
ArgumentException 方法参数不符合要求(如范围错误)。 csharp<br>if (value < 0) <br> throw new ArgumentException("数值不能为负");<br> 在方法入口验证参数合法性,提供明确的错误信息。
ArgumentNullException 方法参数为 null csharp<br>if (input == null) <br> throw new ArgumentNullException("input 参数不能为 null");<br> 使用 null 检查并抛出明确异常,避免后续逻辑崩溃。
IndexOutOfRangeException 访问数组或集合的无效索引。 csharp<br>if (index >= array.Length) <br> throw new IndexOutOfRangeException("索引越界");<br> 确保索引在有效范围内,使用 for 循环或 foreach 遍历。
UnityException Unity 内部错误(如资源加载失败、非法操作)。 csharp<br>if (!System.IO.File.Exists(path)) <br> throw new UnityException("资源文件不存在");<br> 检查资源路径、权限或依赖关系,使用 try-catch 包裹可能失败的操作。
NotSupportedException 当前平台不支持的操作(如调用仅限 Editor 的 API)。 csharp<br>#if !UNITY_EDITOR<br> throw new NotSupportedException("此功能仅在 Editor 可用");<br>#endif<br> 使用条件编译(#if UNITY_EDITOR)隔离平台相关代码。
InvalidOperationException 在非法状态下调用方法(如未初始化完成时调用)。 csharp<br>if (!isInitialized) <br> throw new InvalidOperationException("对象未初始化完成");<br> 确保对象状态符合预期,添加状态标志位检查。
Custom Exception
(自定义异常)
业务逻辑错误(如玩家金币不足、技能冷却中)。 csharp<br>public class NotEnoughCoinsException : Exception {<br> public NotEnoughCoinsException() : base("金币不足") {}<br>}<br> 继承 Exception 类定义业务异常,在关键逻辑处抛出并处理。

第一点异常非常常见,在编写代码时千万注意对引用对象的判空处理。 

小tips:

try-catch:在可能引发异常的代码块外包裹,避免程序崩溃。

try {
    RiskyOperation();
} catch (Exception e) {
    Debug.LogError($"操作失败: {e.Message}");
}

三、面板介绍

Statistics

音频部分(Audio - Suspended)

当音频系统处于暂停状态时,显示以下关键指标:

指标 含义 优化意义
Level 当前音频输出的音量级别,单位为分贝(dB)。负值表示相对于最大音量的衰减。 若音量异常低或高,需检查音频源的增益设置或混音器配置。
DSP Load 音频数字信号处理(DSP)占用的CPU资源百分比(0.4%表示极低负载)。 高值(如>10%)可能表明音频处理复杂,需优化音频效果链或减少同时播放的音效数量。
Clipping 音频信号削波的比例(0.0%表示无削波)。削波是音频信号超过设备最大电平导致的失真。 若出现削波,需降低音频源音量或使用动态压缩(Compressor)效果。
Stream Load 音频流(如从磁盘加载的音频文件)处理的CPU负载。 高值可能因频繁加载大文件导致,建议使用内存加载(Decompress On Load设为false)。

图形部分(Graphics)

实时渲染性能的核心指标

指标 含义 优化意义
CPU: main / render thread 主线程(逻辑计算)和渲染线程的时间消耗(12.7ms + 1.5ms ≈ 总帧时间)。 总帧时间超过目标帧时间(如16ms@60FPS)需优化代码逻辑或减少渲染负载。
Batches 当前帧的绘制调用次数(6次)。合批(Batching)可减少次数。 高批次(如>100)需合并材质(相同Shader和纹理)或使用GPU Instancing。
Saved by batching 通过合批节省的绘制调用次数(0表示未节省)。 若数值低,需检查材质差异或静态/动态批处理设置(勾选Static Batching)。
Tris / Verts 当前帧渲染的三角形数(1.7k)和顶点数(5.1k)。 高值可能导致GPU负载过高,需简化模型LOD(层次细节)或遮挡剔除(Occlusion Culling)。
Screen 当前屏幕分辨率(1038x398)及显存占用(4.7MB)。 高分辨率或显存占用可能需降低纹理分辨率或使用压缩格式(如ASTC)。
SetPass calls 渲染通道切换次数(6次),每次切换可能涉及材质或Shader变更。 减少材质多样性或使用Shader变体(Variants)合并。
Shadow casters 当前投射阴影的对象数量(1个)。 阴影计算开销大,可减少动态阴影数量或改用烘焙光照(Baked Lighting)。
Visible skinned meshes 可见的蒙皮网格(如角色动画)数量(0个)。 蒙皮网格计算较耗CPU,需优化骨骼数量或使用GPU Skinning。
Animation components playing 正在播放的传统动画组件数量(0个)。 旧版Animation组件性能较差,建议升级为Animator组件。
Animator components playing 正在播放的Animator组件数量(0个)。 大量Animator可能影响性能,需合并动画状态机或使用优化插件(如Animancer)。

 有些术语可能不太清楚,没关系,搜就是了,这里只是列个清单。

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐