Unity HTFramework框架(二十一)Debug调试器

Posted 神码编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity HTFramework框架(二十一)Debug调试器相关的知识,希望对你有一定的参考价值。

更新日期:2019年10月15日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]

索引

Debug调试器简介

Debug模块自带Debugger运行时调试器,可以监控一些常规数据与软件运行环境,或是进行一些高级的操作,比如检索场景所有游戏对象(等效于编辑器内Hierarchy窗口的功能),检索游戏对象的所有组件(等效于编辑器内Inspector窗口的功能)。

使用Debug

启用Debugger调试器

在面板勾选IsEnableDebugger开关,则启用了Debugger调试器。

注意:必须在面板开启IsEnableDebugger,调试器才可用,之后通过代码设置IsEnableDebugger为false可动态停用调试器,如若面板未开启IsEnableDebugger,之后通过代码设置IsEnableDebugger将无效。

1.Debugger:当前使用的调试器。
2.Debugger Skin:当前使用的调试器的GUI皮肤。

Debugger调试器面板

启用调试器之后,运行主场景便可以看到调试器面板。

FPS帧率监控

用于显示实时帧率,点击FPS按钮可以展开或收缩完整的调试器窗口。

Console [控制台日志]

这里可以查看程序的所有运行日志,包括使用Debug.Log系列打印的日志,或是其他的未捕获异常。

Scene [场景]

这里可以实时监控场景中的所有游戏对象(在软件发布后的运行时,而非编辑器内),或者以自定义的调试器组件来检索某一特定的组件,修改组件属性或是执行任何自定义操作。

Hierarchy [层级]

Hierarchy层级窗口几乎等效于编辑器内的Hierarchy层级窗口,显示当前所有场景中的所有游戏对象:

【Debug视图】

【对应编辑器内视图】

Inspector [检视]

在Hierarchy层级窗口选中一个游戏对象后,Inspector检视窗口则显示其上挂载的所有组件,选中某一个组件,可以显示其调试器UI(前提是为该组件定义调试器组件)。

【Debug视图】

【对应编辑器内视图】

定义调试器组件

如下,有Player类:

public class Player : MonoBehaviour

    /// <summary>
    /// 生命力
    /// </summary>
    public int HP;
    /// <summary>
    /// 魔法力
    /// </summary>
    public int MP;
    /// <summary>
    /// 能量
    /// </summary>
    public int Power;

    public void Attack()
     

我们为Player定义调试器组件
1.调试器组件必须继承至DebuggerComponentBase
2.调试器组件必须标记特性CustomDebugger,并传入参数指向的组件类型
如下,有指向Player类的调试器组件DebuggerPlayer

[CustomDebugger(typeof(Player))]
public class DebuggerPlayer : DebuggerComponentBase

    private Player _target;

    public override void OnEnable()
    
        _target = Target as Player;
    

    public override void OnDebuggerGUI()
    
        
    

注意:调试器组件的Target字段为当前指向的组件Player(Component),OnEnable方法当调试器面板的Player组件被选中时调用,之后OnDebuggerGUI方法用于自定义Player组件在调试器面板的显示UI。

重写调试器UI

重写OnDebuggerGUI方法即是重写组件在调试器的Inspector面板的显示UI。

    public override void OnDebuggerGUI()
    
        GUILayout.BeginHorizontal();
        GUILayout.Label("HP:" + _target.HP.ToString());
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("MP:" + _target.MP.ToString());
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Power:" + _target.Power.ToString());
        GUILayout.EndHorizontal();

        //模拟攻击
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Attack"))
        
            _target.Attack();
        
        GUILayout.EndHorizontal();

        //击杀
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Kill This Player"))
        
            _target.HP = 0;
        
        GUILayout.EndHorizontal();

        //恢复
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Recover HP"))
        
            _target.HP = 100;
        
        if (GUILayout.Button("Recover MP"))
        
            _target.MP = 100;
        
        if (GUILayout.Button("Recover Power"))
        
            _target.Power = 100;
        
        GUILayout.EndHorizontal();
    

我们运行主场景,并在Hierarchy面板选中Player对象,在Inspector面板选中Player组件,如下,我们自定义的OnDebuggerGUI

我们可以在OnDebuggerGUI方法中自定义任何操作(比如上文的Kill This PlayerRecover HP等),这些操作将打破程序的正常运行轨迹,以实现一些特殊的调试需求。

动态添加组件

点击Add Component按钮,弹出组件选择列表,用以选择将要添加到当前选中的游戏对象上的组件:

动态删除组件

在选中一个组件时,点击Delete Component按钮,立即从当前选中的游戏对象上移除该组件:

Memory [内存]

这里可以监控整个项目的内存使用信息,手动卸载资源,手动进行GC垃圾回收。

DrawCall [DC监控]

这里可以监控整个项目的DrawCall信息。

System [系统]

这里可以获取当前运行系统的信息,包括操作系统、处理器、显卡等硬件信息。

Screen [屏幕]

这里可以查看显示屏的相关信息,或者程序分辨率等,可以进行全屏和非全屏的切换,以及截屏等操作。

Quality [质量]

这里可以查看或重新设置当前程序的图形显示质量。

Time [时间]

这里可以查看程序的运行时间,或是手动调整Time Scale的倍率等。

Environment [环境]

这里可以查看程序的基本信息。

性能监控

Debug的性能监控

运行时检视面板

在编辑器中运行时将会出现运行时检视面板(Runtime Data),主要用以调试或数据监测,目前面板如下:

1.No Runtime Data!

以上是关于Unity HTFramework框架(二十一)Debug调试器的主要内容,如果未能解决你的问题,请参考以下文章

Unity HTFramework框架(四十一)在编辑器内绘制美观且实用的表格窗口(TableView)

Unity HTFramework框架(四十一)在编辑器内绘制美观且实用的表格窗口(TableView)

Unity HTFramework框架(四十一)在编辑器内绘制美观且实用的表格窗口(TableView)

Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

Unity HTFramework框架(四十三)标准化命名

Unity HTFramework框架(四十三)标准化命名