介绍

SRDebugger 是一款 Unity 运行时的插件,可以显示当前的硬件信息、日志、选项、性能数据。

如果只是单纯地使用日志工具,有 Unity 插件推荐:In-game Debug Console - 狂飙

SRDebugger 中我认为最重要的功能是 Options 功能,可以将代码变成 UI,用来控制功能开关、取值范围、触发操作。官网的视频展示了如何调整其中的选项。官网功能介绍中的这张截图可以很好地展示效果:

SRDebugger Options

SRDebugger 甚至还支持密码解锁功能,可以设定为每次都需要密码或只需要一次密码。

首个版本 2015-02-07 发布,最新版本是 2022-04-30 发布,一共发布了 34 个版本。

官方网站做得非常全面,简介、功能介绍、文档、版本日志等一应俱全,这也从侧面证明了插件的质量很不错。

环境

  • Unity 2019.4.32f1
  • SRDebugger 1.21.1

使用

简单方法

导入 SRDebugger 后需要将其放在游戏逻辑代码所在的 asmdef 或目录中,将 SROptions 类与游戏逻辑代码放在一起编译。SRDebugger 使用 分部类 - C# 编程指南 | Microsoft Docs 与反射来实现自动化的选项面板。官方的示例很好地展示了如何使用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class SROptions {

	// Default Value for property
	private float _myProperty = 0.5f;

	// Options will be grouped by category
	[Category("My Category")] 
	public float MyProperty {
		get { return _myProperty; }
		set { _myProperty = value; }
	}

	private float _myRangeProperty = 0f;

	// The NumberRange attribute will ensure that the value never leaves the range 0-10
	[NumberRange(0, 10)]
	[Category("My Category")]
	public float MyRangeProperty {
		get { return _myRangeProperty; }
		set { _myRangeProperty = value; }
	}
}

分离方法

如果需要将 SRDebugger 与游戏逻辑代码分开编译,可以使用插件提供的 Options Containers,还是按照前面的示例编写代码,然后在运行时使用 API 将选项注入到 SRDebugger 中。具体方法参考官方文档:

策略

不要依赖 SRDebugger,要做到未来删除 SRDebugger 插件时,对游戏没有任何影响。要做到这样,需要:

  1. 不使用 SROptions.Current 的 API,而是在 SROptions 类中调用游戏逻辑接口。
  2. 使用类的全局静态变量将开关暴露给插件使用。

另外,需要控制插件的可见性:

  1. 使用特殊方式开启,降低用户发现的可能性。
  2. 使用权限控制,例如当前 IP 或用户的白名单控制工具是否可用,这样即便用户发现后也不能使用。