Zum Inhalt springen

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:

AttributBeschreibung
MeterDefiniert den Variablennamen, zugänglich über engine.vision.meter, wobei meter der gewählte Name ist.
TypeGibt den Meter-Typ an: linear, area, ocr_textmatch oder ocr_numeric
XX-Koordinate in normierter Form. Der Meter wird von seiner oberen linken Ecke aus gezeichnet.
YY-Koordinate in normierter Form.

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.

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:

AttributBeschreibung
WidthDer Breitenwert in normierter Form
HDie HSL-Farbtonkomponente, von 0 bis 360
SDie HSL-Sättigungskomponente, von 0% bis 100%
LDie HSL-Helligkeitskomponente, von 0% bis 100%

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:

AttributBeschreibung
WidthDer Breitenwert in normierter Form
HeightDer Höhenwert in normierter Form
HDie HSL-Farbtonkomponente, von 0 bis 360
SDie HSL-Sättigungskomponente, von 0% bis 100%
LDie HSL-Helligkeitskomponente, von 0% bis 100%

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:

AttributBeschreibung
WidthDie Breite in normierter Form.
HeightDie Höhe in normierter Form.
StringDie zu suchende Zeichenfolge. Groß-/Kleinschreibung-sensitiv.
ConfidenceEin Wert von 0–100, der angibt, wie sicher der Meter bei einer Übereinstimmung sein soll. Standardwert ist 70, falls nicht angegeben.

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:

AttributBeschreibung
WidthDie Breite in normierter Form.
HeightDie Höhe in normierter Form.
ConfidenceEin Wert von 0–100, der angibt, wie sicher der Meter bei einer Übereinstimmung sein soll. Standardwert ist 70, falls nicht angegeben.

Content-Properties sind Meter mit höherer Datendichte, die direkt aus der API stammen.

  • 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.
  • 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.

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.