Smart Tags
Über Benutzereingabefelder hinaus können Meta-Tags auch Daten aus der SignalRGB-API abrufen. Diese werden als Meter bezeichnet und sind von der im Abschnitt “Snippets” besprochenen Meter-Klasse zu unterscheiden. Es stehen vier Typen visueller Meter zur Verfügung: linear, area, ocr_textmatch und ocr_numeric.
Außerdem bietet die API sieben Content-Properties: Audiopegel, Audiobreite, Audiodichte, Audiofrequenz, Zonenfarbton, Zonensättigung und Zonenhelligkeit.
Alle Meter haben vier gemeinsame Kernattribute:
| Attribut | Beschreibung |
|---|---|
| Meter | Definiert den Variablennamen, zugänglich über engine.vision.meter, wobei meter der gewählte Name ist. |
| Type | Gibt den Meter-Typ an: linear, area, ocr_textmatch oder ocr_numeric |
| X | X-Koordinate in normierter Form. Der Meter wird von seiner oberen linken Ecke aus gezeichnet. |
| Y | Y-Koordinate in normierter Form. |
Normierte Koordinaten
Abschnitt betitelt „Normierte Koordinaten“X- und Y-Koordinaten sowie Höhe und Breite müssen als normierte Werte eingegeben werden. Wenn beispielsweise ein Spiel in 1920x1080 Auflösung gespielt wird und ein kleines Meter ungefähr in der Mitte links auf dem Bildschirm platziert werden soll, wird der Ursprung (obere linke Ecke) des Meters auf 50 Pixel vom linken Rand und 500 Pixel von der oberen linken Ecke des Bildschirms bestimmt.
Das ergibt:
x = 50, y = 500.
Um diese in normierte Koordinaten umzurechnen, wird x durch die Bildschirmbreite (1920) und y durch die Bildschirmhöhe (1080) geteilt, was (gerundet und im korrekten Format) ergibt:
x = “.026”, y = “.463”
Obwohl diese Umrechnung theoretisch dafür sorgen sollte, dass ein Meter für jede Auflösung mit einem 16:9-Seitenverhältnis funktioniert, erfahren viele Spiele kleine UI-Änderungen zwischen Auflösungen. Wie Meter für verschiedene Auflösungen formatiert werden, wird im Abschnitt zur Fehlerbehebung am Ende dieser Seite behandelt.
Linearer Meter
Abschnitt betitelt „Linearer Meter“Ein linearer Meter gibt den Prozentsatz der Pixel entlang einer horizontalen Linie zurück, die einem bestimmten HSL-Bereich entsprechen, mit einem Wert von 0.0 bis 1.0. Ein linearer Meter, der die gesamte Breite eines grünen Lebenspunktereglers abdeckt, würde bei halbem Lebensstand beispielsweise den Wert 0.5 zurückgeben.
<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">Lineare Meter erfordern vier zusätzliche Attribute:
| Attribut | Beschreibung |
|---|---|
| Width | Der Breitenwert in normierter Form |
| H | Die HSL-Farbtonkomponente, von 0 bis 360 |
| S | Die HSL-Sättigungskomponente, von 0% bis 100% |
| L | Die HSL-Helligkeitskomponente, von 0% bis 100% |
Flächenmeter
Abschnitt betitelt „Flächenmeter“Ein Flächenmeter gibt den Prozentsatz der Pixel innerhalb eines rechteckigen Bereichs zurück, die in einen bestimmten HSL-Bereich fallen, mit Werten von 0.0 bis 1.0. Dieser Meter-Typ kann verwendet werden, um größere UI-Elemente wie Textfelder oder Minimapbereiche zu erkennen.
<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">Flächenmeter erfordern fünf zusätzliche Attribute:
| Attribut | Beschreibung |
|---|---|
| Width | Der Breitenwert in normierter Form |
| Height | Der Höhenwert in normierter Form |
| H | Die HSL-Farbtonkomponente, von 0 bis 360 |
| S | Die HSL-Sättigungskomponente, von 0% bis 100% |
| L | Die HSL-Helligkeitskomponente, von 0% bis 100% |
OCR-Texterkennungsmeter
Abschnitt betitelt „OCR-Texterkennungsmeter“Dieser Meter verwendet optische Zeichenerkennung (OCR), um innerhalb eines definierten rechteckigen Bereichs auf dem Bildschirm nach einer bestimmten Zeichenfolge zu suchen. Wird die Zeichenfolge gefunden, gibt er 1 zurück; wird sie nicht gefunden, gibt er 0 zurück; und bei Unsicherheit gibt er -1 zurück.
<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">OCR-Texterkennungsmeter erfordern vier zusätzliche Attribute:
| Attribut | Beschreibung |
|---|---|
| Width | Die Breite in normierter Form. |
| Height | Die Höhe in normierter Form. |
| String | Die zu suchende Zeichenfolge. Groß-/Kleinschreibung-sensitiv. |
| Confidence | Ein Wert von 0–100, der angibt, wie sicher der Meter bei einer Übereinstimmung sein soll. Standardwert ist 70, falls nicht angegeben. |
OCR-Zahlenmeter
Abschnitt betitelt „OCR-Zahlenmeter“Dieser Meter verwendet optische Zeichenerkennung (OCR), um numerische Werte innerhalb eines rechteckigen Bereichs auf dem Bildschirm zu erkennen. Bei Erfolg gibt er die Zahl als Integer zurück; bei Misserfolg gibt er -1 zurück.
<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">OCR-Zahlenmeter erfordern drei zusätzliche Attribute:
| Attribut | Beschreibung |
|---|---|
| Width | Die Breite in normierter Form. |
| Height | Die Höhe in normierter Form. |
| Confidence | Ein Wert von 0–100, der angibt, wie sicher der Meter bei einer Übereinstimmung sein soll. Standardwert ist 70, falls nicht angegeben. |
Content-Properties
Abschnitt betitelt „Content-Properties“Content-Properties sind Meter mit höherer Datendichte, die direkt aus der API stammen.
Audio-Properties
Abschnitt betitelt „Audio-Properties“- engine.audio.level gibt den aktuellen Audiopegel in Dezibel zurück.
- engine.audio.width gibt die wahrgenommene Stereobreite des eingehenden Audios als Verhältnis von 0 bis 1 an.
- engine.audio.density gibt die Frequenzdichte des eingehenden Audios als Verhältnis von 0 bis 1 an – weißes Rauschen erzeugt Werte nahe 1,0, während reine Töne Werte näher an 0 zurückgeben.
- engine.audio.freq gibt ein Array mit 200 Elementen zurück, von denen jedes den aktuellen Pegel eines bestimmten Frequenzbands repräsentiert.
Bildschirm-Properties
Abschnitt betitelt „Bildschirm-Properties“- engine.zone.hue gibt ein Array mit 560 Elementen zurück, von denen jedes den Farbtonwert eines Punktes auf dem Bildschirm repräsentiert. Diese Punkte werden aus einem 28 x 20-Raster abgetastet.
- engine.zone.saturation gibt ein Array mit 560 Elementen zurück, von denen jedes die Sättigung an einem Bildschirmpunkt repräsentiert, abgetastet aus demselben 28 x 20-Raster.
- engine.zone.lightness gibt ein Array mit 560 Elementen zurück, von denen jedes den Helligkeitswert an einem Bildschirmpunkt angibt, ebenfalls aus dem 28 x 20-Raster abgetastet.
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“Beim Programmieren können Probleme auftreten. Im Folgenden sind einige häufige Probleme mit Metern und deren Lösungen aufgeführt:
-
“Mein Meter oder mein Benutzersteuerelement wird in der App nicht angezeigt”
- Versuche, die Anwendung vollständig zu schließen und neu zu starten. Wenn das Problem weiterhin besteht, ist der Meter möglicherweise falsch formatiert. Rechtschreibung und Zeichensetzung prüfen.
-
“Die App oder das LightScript stürzt ständig ab”
- Dies wird häufig durch einen fehlerhaften Meter verursacht. Fehlende oder überzählige Attribute können die App oder den Code zum Absturz bringen. Wenn die Meter korrekt sind, nach Problemen wie Endlosschleifen oder nicht deklarierten Variablen suchen.
-
“Mein Meter wird angezeigt, verfolgt aber nicht den richtigen Bildschirmbereich”
- Die normierten Koordinaten könnten falsch sein. Zu beachten: x / Bildschirmbreite, y / Bildschirmhöhe. Falls die Mathematik schwierig erscheint, kann die Breite oder Höhe des Meters erhöht werden, um den korrekten Bildschirmbereich zu identifizieren. Zu beachten ist, dass rechteckige Meter im Inspector vertikal gestaucht aussehen.
-
“Mein Meter funktioniert bei einer Auflösung, aber nicht bei anderen”
- Zum Glück sind keine mehrfachen Meter für dynamische UI nötig. Unten ist ein Beispiel eines linearen Meters, das für mehrere Auflösungen angepasst wurde.
<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>Wie zu sehen ist, wurde der Meter speziell für 3840x2160 und 2560x1080 Auflösungen angepasst. Alle anderen Auflösungen verwenden den ursprünglichen Meter als Standard.
-
“Mein Meter ist korrekt platziert, wird aber nicht ausgelöst”
- Als LightScript-Entwickler wird dieses Problem häufig auftreten. Flächen- und lineare Meter können bei Verläufen oder transparenten UI-Elementen unzuverlässig sein. Einen HSL-Regler (wie diesen) öffnen und den Bildschirm beobachten, bis die Farben übereinstimmen. Mit weiten Bereichen bei Farbton, Sättigung und Helligkeit beginnen, bis der Meter konsistent auslöst, dann den Bereich einengen. Bei OCR-Metern sicherstellen, dass das gesamte Wort oder die gesamte Zahl im Meter enthalten ist, mit so wenig zusätzlichem Inhalt wie möglich. Die Textgröße oder Bildschirmauflösung, bei der OCR-Meter funktionieren, ist begrenzt. Einen OCR-Meter auf einem großen “VICTORY”-Text auf einem 1920x1080-Bildschirm zu platzieren? Kein Problem. Aber in einem Chatfenster bei 1280x720 sind die Ergebnisse begrenzt. Außerdem ist hoher Kontrast zwischen Text und Hintergrund ideal für OCR – weißer Text auf weißem Hintergrund wird nicht erkannt.
-
“Mein Meter löst zu häufig oder ständig aus”
- Glückwunsch, der Meter funktioniert, aber dreimaliges Auslösen pro Sekunde ist wahrscheinlich nicht das Ziel. Transparente UI-Elemente, farbenfrohe Umgebungen, Explosionen und sogar Zwischensequenzen können falsche oder schnelle Aktivierungen der Meter verursachen. Dies wird immer eine Herausforderung bleiben. Eine einfache Lösung ist die Verwendung der Meter-Klasse, wie im nächsten Abschnitt Snippets beschrieben.