跳到內容

智慧標籤

除了使用者輸入欄位之外,meta 標籤還可以從 SignalRGB API 擷取資料。這些稱為儀錶,與 Snippets 章節中討論的 Meter 類別不同。有四種可用的視覺儀錶類型:linear、area、ocr_textmatchocr_numeric

此外,API 提供七個內容屬性:音頻電平、音頻寬度、音頻密度、音頻頻率、區域色相、區域飽和度區域亮度

所有儀錶共用四個核心屬性:

屬性說明
Meter定義變數名稱,可透過 engine.vision.meter 存取,其中 meter 是您選擇的名稱。
Type指定儀錶類型:linearareaocr_textmatchocr_numeric
XX 座標,以正規化形式表示。儀錶從其左上角繪製。
YY 座標,以正規化形式表示。

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寬度值,以正規化形式表示
HHSL 色相分量,範圍從 0 到 360
SHSL 飽和度分量,從 0% 到 100%
LHSL 亮度分量,從 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高度值,以正規化形式表示
HHSL 色相分量,範圍從 0 到 360
SHSL 飽和度分量,從 0% 到 100%
LHSL 亮度分量,從 0% 到 100%

此儀錶使用光學字元辨識 (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要搜尋的字串。區分大小寫。
Confidence0-100 的值,指定儀錶對匹配應有多確定。如果未指定,預設為 70。

此儀錶使用光學字元辨識 (OCR) 在螢幕上的矩形區域內偵測數值。如果成功,返回整數形式的數字;如果失敗,返回 -1。

<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">

OCR 數字儀錶需要三個額外的屬性:

屬性說明
Width寬度,以正規化形式表示。
Height高度,以正規化形式表示。
Confidence0-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>

如您所見,我已專門為 3840x21602560x1080 解析度調整了儀錶。所有其他解析度將預設使用原始儀錶。

  • 「我的儀錶位置正確但不會觸發」

    • 作為 LightScript 開發者,這將是一個常見問題。區域和線性儀錶在漸層或透明 UI 上可能會很不穩定。開啟一個 HSL 滑桿(如此類滑桿)並觀察您的螢幕,直到顏色匹配。從色相、飽和度和亮度的寬範圍開始,直到儀錶持續觸發,然後縮小範圍。對於 OCR 儀錶,確保您定位的整個單詞或數字都包含在儀錶中,額外內容盡量少。OCR 儀錶能夠識別的文字大小或螢幕解析度是有限制的。將 OCR 儀錶放在填滿 1920x1080 螢幕的大型「VICTORY」文字上?沒問題。但在 1280x720 的聊天框上嘗試,您會看到有限的結果。此外,文字和背景之間的高對比對於 OCR 來說是理想的——白底白字將無法被讀取。
  • 「我的儀錶觸發得太頻繁或一直觸發」

    • 恭喜,您的儀錶正常運作,但每秒觸發三次可能不是您想要的。透明 UI、多彩的環境、爆炸效果,甚至過場動畫都可能導致儀錶的誤觸發或快速觸發。這將始終是一個挑戰。一個簡單的解決方法是使用 Meter 類別,如下一節 Snippets 中所述。