Smart Tags
Naast gebruikersinvoervelden kunnen meta-tags ook gegevens ophalen uit de SignalRGB API. Dit worden meters genoemd, die verschillen van de Meter-klasse die in de sectie Snippets wordt besproken. Er zijn vier soorten visuele meters beschikbaar: lineair, gebied, ocr_textmatch en ocr_numeric.
Bovendien biedt de API zeven inhoudskenmerken: audioniveau, audiobreedte, audiodichtheid, audiofrequentie, zonetint, zoneverzadiging en zonehelderheid.
Meters
Section titled “Meters”Alle meters delen vier kernattributen:
| Attributen | Beschrijving |
|---|---|
| Meter | Definieert de variabelenaam, toegankelijk via engine.vision.meter, waarbij meter uw gekozen naam is. |
| Type | Specificeert het metertype: linear, area, ocr_textmatch of ocr_numeric |
| X | X-coördinaat, in genormaliseerde vorm. De meter wordt getekend vanaf de linkerbovenhoek. |
| Y | Y-coördinaat, in genormaliseerde vorm. |
Genormaliseerde coördinaten
Section titled “Genormaliseerde coördinaten”X- en Y-coördinaten, samen met hoogte en breedte, moeten worden ingevoerd als genormaliseerde waarden. Als ik bijvoorbeeld een spel speel op 1920x1080-resolutie en een kleine meter ruwweg halverwege aan de linkerkant van het scherm wil plaatsen, bepaal ik de oorsprong (linkerbovenhoek) van de meter als 50 pixels van links en 500 pixels omlaag vanaf de linkerbovenhoek van het scherm.
Dit geeft me:
x = 50, y = 500.
Om deze naar genormaliseerde coördinaten te converteren, deel ik x door de schermbreedte (1920) en y door de schermhoogte (1080), wat resulteert (afgerond en in het juiste formaat) in:
x = “.026”, y = “.463”
Hoewel deze conversie theoretisch een meter zou moeten laten werken voor elke resolutie met een 16:9-beeldverhouding, ondervinden veel spellen kleine UI-wijzigingen tussen resoluties. Hoe meters voor verschillende resoluties moeten worden opgemaakt, wordt behandeld in de probleemoplossingsectie onderaan deze pagina.
Lineaire meter
Section titled “Lineaire meter”Een lineaire meter retourneert het percentage pixels langs een horizontale lijn dat overeenkomt met een opgegeven HSL-bereik, met een waarde van 0,0 tot 1,0. Een lineaire meter die de volledige breedte van een groene gezondheidsbalk beslaat, retourneert bijvoorbeeld een waarde van 0,5 bij de helft van de gezondheid.
<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">Lineaire meters vereisen vier aanvullende attributen:
| Attribuut | Beschrijving |
|---|---|
| Width | De breedtewaarde, uitgedrukt in genormaliseerde vorm |
| H | De HSL-tintcomponent, variërend van 0 tot 360 |
| S | De HSL-verzadigingscomponent, van 0% tot 100% |
| L | De HSL-helderheidscomponent, van 0% tot 100% |
Gebiedsmeter
Section titled “Gebiedsmeter”Een gebiedsmeter retourneert het percentage pixels binnen een rechthoekig gebied dat binnen een opgegeven HSL-bereik valt, met waarden van 0,0 tot 1,0. Dit type meter kan worden gebruikt om grotere UI-elementen zoals tekstvakken of minikaartgebieden te detecteren.
<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">Gebiedsmeters vereisen vijf aanvullende attributen:
| Attribuut | Beschrijving |
|---|---|
| Width | De breedtewaarde, uitgedrukt in genormaliseerde vorm |
| Height | De hoogtewaarde, uitgedrukt in genormaliseerde vorm |
| H | De HSL-tintcomponent, variërend van 0 tot 360 |
| S | De HSL-verzadigingscomponent, van 0% tot 100% |
| L | De HSL-helderheidscomponent, van 0% tot 100% |
OCR-tekstvergelijkingsmeter
Section titled “OCR-tekstvergelijkingsmeter”Deze meter gebruikt Optische Tekenherkenning (OCR) om een specifieke tekenreeks te zoeken binnen een gedefinieerd rechthoekig gebied op het scherm. Als de tekenreeks wordt gevonden, retourneert het 1; als niet gevonden, retourneert het 0; en als het onzeker is, retourneert het -1.
<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">OCR-tekstvergelijkingsmeters vereisen vier aanvullende attributen:
| Attribuut | Beschrijving |
|---|---|
| Width | De breedte, in genormaliseerde vorm. |
| Height | De hoogte, in genormaliseerde vorm. |
| String | De te zoeken tekenreeks. Hoofdlettergevoelig. |
| Confidence | Een waarde van 0-100 die aangeeft hoe zeker de meter moet zijn van een overeenkomst. Standaard 70 als niet opgegeven. |
OCR-numerieke meter
Section titled “OCR-numerieke meter”Deze meter gebruikt Optische Tekenherkenning (OCR) om numerieke waarden te detecteren binnen een rechthoekig gebied op het scherm. Als het lukt, retourneert het het getal als een geheel getal; als het mislukt, retourneert het -1.
<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">OCR-numerieke meters vereisen drie aanvullende attributen:
| Attribuut | Beschrijving |
|---|---|
| Width | De breedte, in genormaliseerde vorm. |
| Height | De hoogte, in genormaliseerde vorm. |
| Confidence | Een waarde van 0-100 die aangeeft hoe zeker de meter moet zijn van een overeenkomst. Standaard 70 als niet opgegeven. |
Inhoudskenmerken
Section titled “Inhoudskenmerken”Inhoudskenmerken zijn meters met hogere dichtheid die rechtstreeks uit de API komen.
Audio-eigenschappen
Section titled “Audio-eigenschappen”- engine.audio.level retourneert het huidige audioniveau in decibel.
- engine.audio.width geeft de waargenomen stereobreedte van de inkomende audio, als een verhouding van 0 tot 1.
- engine.audio.density geeft de frequentiedichtheid van de inkomende audio, ook als een verhouding van 0 tot 1 — witte ruis produceert waarden nabij 1,0, terwijl pure tonen waarden dichter bij 0 retourneren.
- engine.audio.freq retourneert een array met 200 elementen, elk vertegenwoordigt het huidige niveau van een specifiek frequentieband.
Schermeigenschappen
Section titled “Schermeigenschappen”- engine.zone.hue retourneert een array van 560 elementen, elk vertegenwoordigt de tintwaarde van een punt op het scherm. Deze punten worden bemonsterd uit een 28 x 20-raster.
- engine.zone.saturation retourneert een array van 560 elementen, elk vertegenwoordigt de verzadiging op een schermpunt, bemonsterd uit hetzelfde 28 x 20-raster.
- engine.zone.lightness retourneert een array van 560 elementen, elk geeft de helderheidswaarde op een schermpunt aan, ook bemonsterd uit het 28 x 20-raster.
Probleemoplossing
Section titled “Probleemoplossing”Bij het schrijven van code kunnen er problemen optreden. Hieronder staan enkele veelvoorkomende problemen met meters en hoe u ze kunt oplossen:
-
“Mijn meter of gebruikersbesturingselement verschijnt niet in de app”
- Probeer de applicatie volledig te sluiten en opnieuw te starten. Als het probleem aanhoudt, is de meter mogelijk onjuist opgemaakt. Controleer de spelling en interpunctie.
-
“De app of LightScript blijft crashen”
- Dit wordt vaak veroorzaakt door een onjuist gevormde meter. Ontbrekende of extra attributen kunnen de app of de code laten crashen. Als uw meters correct zijn, zoek dan naar problemen zoals oneindige lussen of niet-gedeclareerde variabelen.
-
“Mijn meter verschijnt maar volgt niet het juiste schermgebied”
- De genormaliseerde coördinaten zijn mogelijk onjuist. Onthoud: het is x / schermbreedte, y / schermhoogte. Als wiskunde niet uw sterkste kant is, probeer dan de breedte of hoogte van de meter te vergroten om het juiste schermgebied te identificeren. Houd er rekening mee dat rechthoekige meters er verticaal samengedrukt uitzien in de inspector.
-
“Mijn meter werkt op één resolutie, maar niet op andere”
- Gelukkig hebt u geen meerdere meters nodig voor dynamische UI. Zie hieronder voor een voorbeeld van een lineaire meter aangepast voor meerdere resoluties.
<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>Zoals u kunt zien, heb ik de meter specifiek aangepast voor resoluties 3840x2160 en 2560x1080. Alle andere resoluties gebruiken standaard de oorspronkelijke meter.
-
“Mijn meter is correct geplaatst maar wordt niet geactiveerd”
- Als LightScript-ontwikkelaar zal dit een veelvoorkomend probleem zijn. Gebied- en lineaire meters kunnen lastig zijn op verlopen of transparante UI. Open een HSL-schuifregelaar en observeer uw scherm totdat de kleuren overeenkomen. Begin met brede bereiken in tint, verzadiging en helderheid totdat de meter consistent activeert, vernauw dan. Zorg er voor OCR-meters voor dat het hele woord of getal dat u zoekt is opgenomen in de meter, met zo weinig mogelijk extra inhoud. Er is een limiet aan de tekstgrootte of schermresolutie waarop OCR-meters werken. Een OCR-meter plaatsen op een grote “VICTORY”-tekst die een 1920x1080-scherm vult? Geen probleem. Maar probeer het op een chatbox bij 1280x720 en u zult beperkte resultaten zien. Ook is hoog contrast tussen tekst en achtergrond ideaal voor OCR — witte tekst op een witte achtergrond wordt niet gelezen.
-
“Mijn meter wordt te snel of de hele tijd geactiveerd”
- Gefeliciteerd, uw meter werkt, maar drie keer per seconde activeren is waarschijnlijk niet wat u wilt. Transparante UI, kleurrijke omgevingen, explosies en zelfs tussenfilmpjes kunnen valse of snelle activering van uw meters veroorzaken. Dit zal altijd een uitdaging zijn. Een eenvoudige oplossing is het gebruik van de Meter-klasse, zoals beschreven in de volgende sectie, Snippets.