Hoppa till innehåll

Smart-taggar

Utöver fält för användarinmatning kan meta-taggar även hämta data från SignalRGB API. Dessa kallas mätare, åtskiljda från Meter-klassen som diskuteras i avsnittet Kodavsnitt. Det finns fyra typer av visuella mätare tillgängliga: linear, area, ocr_textmatch och ocr_numeric.

Dessutom erbjuder API:et sju innehållsegenskaper: ljudnivå, ljudbredd, ljudtäthet, ljudfrekvens, zonens hue, zonens mättnad och zonens ljushet.

Alla mätare delar fyra kärnattribut:

AttributBeskrivning
MeterDefinierar variabelnamnet, åtkomligt via engine.vision.meter, där meter är ditt valda namn.
TypeAnger mätartypen: linear, area, ocr_textmatch eller ocr_numeric
XX-koordinat i normaliserad form. Mätaren ritas från sitt övre vänstra hörn.
YY-koordinat i normaliserad form.

X- och Y-koordinater, tillsammans med höjd och bredd, måste anges som normaliserade värden. Om jag t.ex. spelar ett spel vid 1920×1080-upplösning och vill placera en liten mätare ungefär halvvägs nedåt på vänster sida av skärmen, bestämmer jag origo (övre vänstra hörnet) för mätaren till 50 pixlar från vänster och 500 pixlar ned från skärmens övre vänstra hörn.

Det ger mig:

x = 50, y = 500.

För att konvertera dessa till normaliserade koordinater delar jag x med skärmbredden (1920) och y med skärmhöjden (1080), vilket resulterar (avrundat och i korrekt format) i:

x = “.026”, y = “.463”

Även om den här konverteringen teoretiskt sett borde tillåta en mätare att fungera för alla upplösningar med ett 16:9-bildförhållande, upplever många spel små UI-förändringar mellan upplösningar. Hur man formaterar mätare för olika upplösningar täcks i felsökningsavsnittet längst ned på den här sidan.

En linjär mätare returnerar procentandelen pixlar längs en horisontell linje som matchar ett specificerat HSL-intervall, med ett värde från 0,0 till 1,0. En linjär mätare som täcker hela bredden av en grön hälsostapel returnerar t.ex. värdet 0,5 vid halvt hälsa.

<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">

Linjära mätare kräver fyra ytterligare attribut:

AttributBeskrivning
WidthBreddvärdet, uttryckt i normaliserad form
HHSL-komponenten hue, från 0 till 360
SHSL-komponenten saturation, från 0 % till 100 %
LHSL-komponenten lightness, från 0 % till 100 %

En ytmätare returnerar procentandelen pixlar inom ett rektangulärt område som faller inom ett specificerat HSL-intervall, med värden från 0,0 till 1,0. Den här typen av mätare kan användas för att identifiera större UI-element som textrutor eller minimapszoner.

<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">

Ytmätare kräver fem ytterligare attribut:

AttributBeskrivning
WidthBreddvärdet, uttryckt i normaliserad form
HeightHöjdvärdet, uttryckt i normaliserad form
HHSL-komponenten hue, från 0 till 360
SHSL-komponenten saturation, från 0 % till 100 %
LHSL-komponenten lightness, från 0 % till 100 %

Den här mätaren använder optisk teckenigenkänning (OCR) för att söka efter en specifik sträng inom ett definierat rektangulärt område på skärmen. Om strängen hittas returneras 1; om den inte hittas returneras 0; och om det är osäkert returneras -1.

<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">

OCR-textmatchningsmätare kräver fyra ytterligare attribut:

AttributBeskrivning
WidthBredden, i normaliserad form.
HeightHöjden, i normaliserad form.
StringSträngen att söka efter. Skiftlägeskänslig.
ConfidenceEtt värde från 0 till 100 som anger hur säker mätaren ska vara om en matchning. Standardvärdet är 70 om det inte anges.

Den här mätaren använder optisk teckenigenkänning (OCR) för att identifiera numeriska värden inom ett rektangulärt område på skärmen. Om det lyckas returneras siffran som ett heltal; om det misslyckas returneras -1.

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

OCR-numeriska mätare kräver tre ytterligare attribut:

AttributBeskrivning
WidthBredden, i normaliserad form.
HeightHöjden, i normaliserad form.
ConfidenceEtt värde från 0 till 100 som anger hur säker mätaren ska vara om en matchning. Standardvärdet är 70 om det inte anges.

Innehållsegenskaper är mätare med högre densitet som kommer direkt från API:et.

  • engine.audio.level returnerar den aktuella ljudnivån i decibel.
  • engine.audio.width ger den upplevda stereobredden av det inkommande ljudet, som ett förhållande från 0 till 1.
  • engine.audio.density ger frekvensdensiteten hos det inkommande ljudet, också som ett förhållande från 0 till 1 – vitt brus producerar värden nära 1,0, medan rena toner returnerar värden närmare 0.
  • engine.audio.freq returnerar en matris med 200 element, var och en representerar den aktuella nivån för ett specifikt frekvensband.
  • engine.zone.hue returnerar en matris med 560 element, var och en representerar hue-värdet för en punkt på skärmen. Dessa punkter samplas från ett 28 × 20 rutnät.
  • engine.zone.saturation returnerar en matris med 560 element, var och en representerar mättnaden vid en skärmpunkt, samplad från samma 28 × 20 rutnät.
  • engine.zone.lightness returnerar en matris med 560 element, var och en indikerar ljusheten vid en skärmpunkt, också samplad från 28 × 20 rutnätet.

När du skriver kod kan problem uppstå. Nedan följer några vanliga problem med mätare och hur man åtgärdar dem:

  • “Min mätare eller användarkontroll visas inte i appen”

    • Prova att stänga och starta om programmet helt. Om problemet kvarstår kan mätaren vara felaktigt formaterad. Dubbelkontrollera stavning och interpunktion.
  • “Appen eller LightScript kraschar ständigt”

    • Det orsakas ofta av en felformaterad mätare. Saknade eller extra attribut kan krascha appen eller koden. Om dina mätare är korrekta, leta efter problem som oändliga loopar eller odeklarerade variabler.
  • “Min mätare visas men spårar inte rätt område på skärmen”

    • De normaliserade koordinaterna kan vara felaktiga. Kom ihåg: det är x / skärmbredd, y / skärmhöjd. Om matematik inte är din starka sida, prova att öka mätarens bredd eller höjd för att hjälpa till att identifiera rätt skärmområde. Kom bara ihåg att rektangulära mätare ser vertikalt sammanpressade ut i inspektören.
  • “Min mätare fungerar på en upplösning, men inte på andra”

    • Lyckligtvis behöver du inte flera mätare för dynamiskt UI. Se nedan för ett exempel på en linjär mätare anpassad för flera upplösningar.
<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>

Som du kan se har jag specifikt justerat mätaren för 3840×2160 och 2560×1080-upplösningar. Alla andra upplösningar kommer att använda standardmätaren.

  • “Min mätare är korrekt placerad men utlöses inte”

    • Som LightScript-utvecklare är det här ett vanligt problem. Yt- och linjära mätare kan vara nyckfulla på gradienter eller transparent UI. Öppna ett HSL-reglage (som det här) och observera din skärm tills färgerna matchar. Börja med breda intervall för hue, mättnad och ljushet tills mätaren konsekvent utlöses, och minska sedan. För OCR-mätare, se till att hela ordet eller siffran du riktar in dig på ingår i mätaren, med så lite extra innehåll som möjligt. Det finns en gräns för textstorleken eller skärmupplösningen där OCR-mätare fungerar. Att placera en OCR-mätare på en stor “VICTORY”-text som fyller en 1920×1080-skärm? Inga problem. Men prova det på en chattruta vid 1280×720 och du får begränsade resultat. Hög kontrast mellan text och bakgrund är också idealiskt för OCR – vit text på vit bakgrund kan inte läsas.
  • “Min mätare utlöses för snabbt eller hela tiden”

    • Grattis, din mätare fungerar, men att utlösas tre gånger i sekunden är förmodligen inte vad du vill ha. Transparent UI, färgglada miljöer, explosioner och till och med mellansekvenser kan orsaka falska eller snabba aktiveringar av dina mätare. Det är alltid en utmaning. En enkel lösning är att använda Meter-klassen, som beskrivs i nästa avsnitt, Kodavsnitt.