智慧標籤
除了使用者輸入欄位之外,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 中所述。