智能标签
除用户输入字段之外,meta 标签还可以从 SignalRGB API 检索数据。这些被称为计量器,与 Snippets 部分讨论的 Meter 类不同。有四种类型的视觉计量器:linear(线性)、area(区域)、ocr_textmatch 和 ocr_numeric。
此外,API 还提供七种内容属性:音频电平、音频宽度、音频密度、音频频率、区域色相、区域饱和度和区域亮度。
所有计量器共享四个核心属性:
| 属性 | 描述 |
|---|---|
| Meter | 定义变量名,可通过 engine.vision.meter 访问,其中 meter 是您选择的名称。 |
| Type | 指定计量器类型:linear、area、ocr_textmatch 或 ocr_numeric |
| X | X 坐标,以标准化形式表示。计量器从其左上角开始绘制。 |
| Y | Y 坐标,以标准化形式表示。 |
X 和 Y 坐标以及高度和宽度必须以标准化值输入。例如,如果我在 1920x1080 分辨率下玩游戏,并想在屏幕左侧大约中间位置放置一个小计量器,我确定计量器的原点(左上角)为距左边 50 像素,距屏幕左上角顶部 500 像素。
这给出:
x = 50, y = 500。
要将这些转换为标准化坐标,我将 x 除以屏幕宽度(1920),将 y 除以屏幕高度(1080),结果(四舍五入并以正确格式)为:
x = “.026”, y = “.463”
虽然此转换理论上应该允许计量器在任何 16:9 宽高比分辨率下工作,但许多游戏在不同分辨率之间会有小的 UI 变化。如何为不同分辨率格式化计量器将在本页底部的故障排查部分介绍。
线性计量器返回沿水平线与指定 HSL 范围匹配的像素百分比,值从 0.0 到 1.0。例如,覆盖绿色血量条全宽的线性计量器在半血时将返回 0.5。
<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">线性计量器需要四个额外属性:
| 属性 | 描述 |
|---|---|
| Width | 宽度值,以标准化形式表示 |
| H | HSL 色相分量,范围从 0 到 360 |
| S | HSL 饱和度分量,从 0% 到 100% |
| L | HSL 亮度分量,从 0% 到 100% |
区域计量器返回矩形区域内落在指定 HSL 范围内的像素百分比,值从 0.0 到 1.0。此类计量器可用于检测较大的 UI 元素,如文本框或小地图区域。
<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">区域计量器需要五个额外属性:
| 属性 | 描述 |
|---|---|
| Width | 宽度值,以标准化形式表示 |
| Height | 高度值,以标准化形式表示 |
| H | HSL 色相分量,范围从 0 到 360 |
| S | HSL 饱和度分量,从 0% 到 100% |
| L | HSL 亮度分量,从 0% 到 100% |
OCR 文本匹配计量器
Section titled “OCR 文本匹配计量器”此计量器使用光学字符识别(OCR)在屏幕上定义的矩形区域内查找特定字符串。如果找到字符串,返回 1;如果未找到,返回 0;如果不确定,返回 -1。
<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">OCR 文本匹配计量器需要四个额外属性:
| 属性 | 描述 |
|---|---|
| Width | 宽度,以标准化形式表示。 |
| Height | 高度,以标准化形式表示。 |
| String | 要查找的字符串。区分大小写。 |
| Confidence | 0-100 的值,指定计量器对匹配的确定程度。如果未指定,默认为 70。 |
OCR 数字计量器
Section titled “OCR 数字计量器”此计量器使用光学字符识别(OCR)检测屏幕上矩形区域内的数字值。如果成功,以整数形式返回数字;如果失败,返回 -1。
<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">OCR 数字计量器需要三个额外属性:
| 属性 | 描述 |
|---|---|
| Width | 宽度,以标准化形式表示。 |
| Height | 高度,以标准化形式表示。 |
| Confidence | 0-100 的值,指定计量器对匹配的确定程度。如果未指定,默认为 70。 |
内容属性是直接来自 API 的高密度计量器。
- engine.audio.level 返回当前音频电平(以分贝为单位)。
- engine.audio.width 以 0 到 1 的比率给出输入音频的感知立体声宽度。
- engine.audio.density 以 0 到 1 的比率提供输入音频的频率密度——白噪声产生接近 1.0 的值,而纯音返回接近 0 的值。
- engine.audio.freq 返回一个包含 200 个元素的数组,每个元素代表特定频段的当前电平。
- engine.zone.hue 返回一个包含 560 个元素的数组,每个元素代表屏幕上某点的色相值。这些点从 28 x 20 的网格中采样。
- engine.zone.saturation 返回一个包含 560 个元素的数组,每个元素代表屏幕点的饱和度,从同一个 28 x 20 网格采样。
- engine.zone.lightness 返回一个包含 560 个元素的数组,每个元素表示屏幕点的亮度值,同样从 28 x 20 网格采样。
编写代码时可能出现问题。以下是一些常见的计量器问题及修复方法:
-
“我的计量器或用户控件在应用中不显示”
- 尝试完全关闭并重启应用程序。如果问题持续,计量器可能格式不正确。仔细检查拼写和标点。
-
“应用或 LightScript 持续崩溃”
- 这通常由格式错误的计量器引起。缺少或额外的属性可能会导致应用或代码崩溃。如果您的计量器正确,请查找无限循环或未声明的变量等问题。
-
“我的计量器出现但不跟踪屏幕的正确区域”
- 标准化坐标可能不正确。记住:是 x / 屏幕宽度,y / 屏幕高度。如果数学不是您的强项,尝试增加计量器的宽度或高度以帮助识别正确的屏幕区域。请记住,矩形计量器在检查器中看起来会垂直压缩。
-
“我的计量器在一种分辨率下工作,但在其他分辨率下不工作”
- 幸运的是,动态 UI 不需要多个计量器。下面是适应多种分辨率的线性计量器示例。
<meta meter="health" tags="vlc,fortnite" x= ".05" y=".9" width=".189" h="70-140" s="40-100" l="40-100" type="linear"> <resolution size="3440x1440" x="0.1666" y="0.8993" width="0.1541"/> <resolution size="2560x1080" x="0.1666" y="0.8993" width="0.1541"/> <resolution size="1920x1080" x="0.0557" y="0.9083" width="0.199"/></meta>如您所见,我专门为 3840x2160 和 2560x1080 分辨率调整了计量器。所有其他分辨率将使用原始计量器。
-
“我的计量器位置正确但不触发”
- 作为 LightScript 开发者,这将是一个常见问题。区域和线性计量器在渐变或透明 UI 上可能会有些棘手。打开 HSL 滑块(如这个)观察屏幕,直到颜色匹配。从色相、饱和度和亮度的宽范围开始,直到计量器持续触发,然后缩小范围。对于 OCR 计量器,确保您定位的整个单词或数字包含在计量器中,尽可能少包含其他内容。OCR 计量器工作的文本大小或屏幕分辨率有限制。将 OCR 计量器放在填满 1920x1080 屏幕的大”VICTORY”文字上?没问题。但在 1280x720 的聊天框上尝试,您会看到有限的结果。此外,文本和背景之间的高对比度对 OCR 来说是理想的——白色背景上的白色文字将无法被读取。
-
“我的计量器触发太频繁或一直触发”
- 恭喜,您的计量器工作了,但每秒触发三次可能不是您想要的。透明 UI、色彩丰富的环境、爆炸,甚至过场动画都可能导致计量器虚假或快速激活。这始终是一个挑战。一个简单的解决方法是使用 Meter 类,如下一节 Snippets 中所述。