Przejdź do głównej zawartości

Smart Tags

Oprócz pól wejściowych użytkownika, meta-tagi mogą również pobierać dane z API SignalRGB. Są one nazywane miernikami, które różnią się od klasy Meter omawianej w sekcji Snippets. Dostępne są cztery typy mierników wizualnych: liniowy, obszarowy, ocr_textmatch i ocr_numeric.

Ponadto API oferuje siedem właściwości treści: poziom audio, szerokość audio, gęstość audio, częstotliwość audio, odcień strefy, nasycenie strefy i jasność strefy.

Wszystkie mierniki mają cztery wspólne atrybuty:

AtrybutyOpis
MeterDefiniuje nazwę zmiennej, dostępną przez engine.vision.meter, gdzie meter to twoja wybrana nazwa.
TypeOkreśla typ miernika: linear, area, ocr_textmatch lub ocr_numeric
XWspółrzędna X w formie znormalizowanej. Miernik jest rysowany od lewego górnego rogu.
YWspółrzędna Y w formie znormalizowanej.

Współrzędne X i Y, a także wysokość i szerokość, muszą być podane jako wartości znormalizowane. Na przykład, jeśli gram w grę przy rozdzielczości 1920x1080 i chcę umieścić mały miernik mniej więcej w połowie lewej strony ekranu, określam punkt początkowy (lewy górny róg) miernika jako 50 pikseli od lewej i 500 pikseli w dół od lewego górnego rogu ekranu.

To daje mi:

x = 50, y = 500.

Aby przekonwertować to na znormalizowane współrzędne, dzielę x przez szerokość ekranu (1920) i y przez wysokość ekranu (1080), co daje (zaokrąglone i w odpowiednim formacie):

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

Chociaż ta konwersja teoretycznie powinna sprawić, że miernik będzie działał dla każdej rozdzielczości o proporcjach 16:9, wiele gier ma drobne zmiany UI między rozdzielczościami. Sposób formatowania mierników dla różnych rozdzielczości jest omówiony w sekcji rozwiązywania problemów na dole tej strony.

Miernik liniowy zwraca procent pikseli wzdłuż poziomej linii pasujących do określonego zakresu HSL, z wartością od 0,0 do 1,0. Na przykład miernik liniowy obejmujący pełną szerokość zielonego paska zdrowia zwraca wartość 0,5 przy połowie zdrowia.

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

Mierniki liniowe wymagają czterech dodatkowych atrybutów:

AtrybutOpis
WidthWartość szerokości wyrażona w formie znormalizowanej
HSkładowa odcienia HSL, od 0 do 360
SSkładowa nasycenia HSL, od 0% do 100%
LSkładowa jasności HSL, od 0% do 100%

Miernik obszarowy zwraca procent pikseli wewnątrz prostokątnego obszaru mieszczących się w określonym zakresie HSL, z wartościami od 0,0 do 1,0. Ten typ miernika może być używany do wykrywania większych elementów UI, takich jak pola tekstowe lub obszary minimapy.

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

Mierniki obszarowe wymagają pięciu dodatkowych atrybutów:

AtrybutOpis
WidthWartość szerokości wyrażona w formie znormalizowanej
HeightWartość wysokości wyrażona w formie znormalizowanej
HSkładowa odcienia HSL, od 0 do 360
SSkładowa nasycenia HSL, od 0% do 100%
LSkładowa jasności HSL, od 0% do 100%

Ten miernik używa Optycznego Rozpoznawania Znaków (OCR) do wyszukiwania konkretnego ciągu znaków w zdefiniowanym prostokątnym obszarze na ekranie. Jeśli ciąg zostanie znaleziony, zwraca 1; jeśli nie zostanie znaleziony, zwraca 0; a jeśli jest niepewny, zwraca -1.

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

Mierniki OCR do dopasowywania tekstu wymagają czterech dodatkowych atrybutów:

AtrybutOpis
WidthSzerokość w formie znormalizowanej.
HeightWysokość w formie znormalizowanej.
StringCiąg znaków do wyszukania. Rozróżnia wielkość liter.
ConfidenceWartość od 0 do 100 wskazująca, jak pewny musi być miernik dopasowania. Domyślnie 70, jeśli nie podano.

Ten miernik używa Optycznego Rozpoznawania Znaków (OCR) do wykrywania wartości numerycznych w prostokątnym obszarze na ekranie. W przypadku powodzenia zwraca liczbę jako liczbę całkowitą; w przypadku niepowodzenia zwraca -1.

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

Numeryczne mierniki OCR wymagają trzech dodatkowych atrybutów:

AtrybutOpis
WidthSzerokość w formie znormalizowanej.
HeightWysokość w formie znormalizowanej.
ConfidenceWartość od 0 do 100 wskazująca, jak pewny musi być miernik dopasowania. Domyślnie 70, jeśli nie podano.

Właściwości treści to mierniki o wyższej gęstości pochodzące bezpośrednio z API.

  • engine.audio.level zwraca bieżący poziom audio w decybelach.
  • engine.audio.width podaje postrzeganą szerokość stereo przychodzącego audio jako stosunek od 0 do 1.
  • engine.audio.density podaje gęstość częstotliwości przychodzącego audio, również jako stosunek od 0 do 1 — biały szum produkuje wartości bliskie 1,0, podczas gdy czyste tony zwracają wartości bliższe 0.
  • engine.audio.freq zwraca tablicę 200 elementów, z których każdy reprezentuje bieżący poziom konkretnego pasma częstotliwości.
  • engine.zone.hue zwraca tablicę 560 elementów, z których każdy reprezentuje wartość odcienia punktu na ekranie. Te punkty są próbkowane z siatki 28 x 20.
  • engine.zone.saturation zwraca tablicę 560 elementów, z których każdy reprezentuje nasycenie punktu ekranu, próbkowanego z tej samej siatki 28 x 20.
  • engine.zone.lightness zwraca tablicę 560 elementów, z których każdy podaje wartość jasności punktu ekranu, również próbkowanego z siatki 28 x 20.

Podczas pisania kodu mogą wystąpić problemy. Poniżej przedstawiono kilka typowych problemów z miernikami i sposoby ich rozwiązania:

  • “Mój miernik lub kontrolka użytkownika nie pojawia się w aplikacji”

    • Spróbuj całkowicie zamknąć i ponownie uruchomić aplikację. Jeśli problem nie ustępuje, miernik może być nieprawidłowo sformatowany. Sprawdź pisownię i interpunkcję.
  • “Aplikacja lub LightScript ciągle się zawiesza”

    • Jest to często spowodowane nieprawidłowo sformułowanym miernikiem. Brakujące lub nadmiarowe atrybuty mogą powodować zawieszanie się aplikacji lub kodu. Jeśli twoje mierniki są poprawne, szukaj problemów takich jak nieskończone pętle lub niezadeklarowane zmienne.
  • “Mój miernik pojawia się, ale nie śledzi właściwego obszaru ekranu”

    • Znormalizowane współrzędne mogą być nieprawidłowe. Pamiętaj: to x / szerokość_ekranu, y / wysokość_ekranu. Jeśli matematyka nie jest twoją mocną stroną, spróbuj zwiększyć szerokość lub wysokość miernika, aby zidentyfikować właściwy obszar ekranu. Pamiętaj, że prostokątne mierniki wyglądają na pionowo ściśnięte w inspektorze.
  • “Mój miernik działa przy jednej rozdzielczości, ale nie przy innych”

    • Na szczęście nie potrzebujesz wielu mierników dla dynamicznego UI. Zobacz poniżej przykład miernika liniowego dostosowanego dla wielu rozdzielczości.
<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>

Jak widać, dostosowałem miernik specjalnie dla rozdzielczości 3840x2160 i 2560x1080. Wszystkie inne rozdzielczości domyślnie używają oryginalnego miernika.

  • “Mój miernik jest poprawnie umieszczony, ale nie aktywuje się”

    • Dla dewelopera LightScript będzie to częsty problem. Mierniki obszarowe i liniowe mogą być trudne przy gradientowym lub przezroczystym UI. Otwórz suwak HSL i obserwuj swój ekran, aż kolory będą pasować. Zacznij od szerokich zakresów odcienia, nasycenia i jasności, aż miernik będzie się aktywować konsekwentnie, a następnie zawęź. W przypadku mierników OCR upewnij się, że całe słowo lub liczba, którą szukasz, mieści się w mierniku, z jak najmniejszą ilością dodatkowej treści. Istnieje limit rozmiaru tekstu lub rozdzielczości ekranu, przy której mierniki OCR działają. Umieszczenie miernika OCR na dużym tekście “VICTORY” wypełniającym ekran 1920x1080? Żaden problem. Ale spróbuj to zrobić w oknie czatu przy 1280x720 i zobaczysz ograniczone wyniki. Ponadto wysoki kontrast między tekstem a tłem jest idealny dla OCR — biały tekst na białym tle nie będzie odczytywany.
  • “Mój miernik aktywuje się zbyt często lub cały czas”

    • Gratulacje, twój miernik działa, ale aktywowanie trzy razy na sekundę prawdopodobnie nie jest tym, czego chcesz. Przezroczysty UI, kolorowe środowiska, eksplozje, a nawet przerywniki filmowe mogą powodować fałszywe lub szybkie aktywacje twoich mierników. To zawsze będzie wyzwanie. Prostym rozwiązaniem jest użycie klasy Meter, jak opisano w następnej sekcji, Snippets.