Smart Tags
Além dos campos de entrada do usuário, as meta tags também podem recuperar dados da API do SignalRGB. Esses são conhecidos como medidores, distintos da classe Meter discutida na seção de Snippets. Existem quatro tipos de medidores visuais disponíveis: linear, area, ocr_textmatch e ocr_numeric.
Além disso, a API oferece sete Propriedades de Conteúdo: nível de áudio, largura de áudio, densidade de áudio, frequência de áudio, matiz de zona, saturação de zona e luminosidade de zona.
Medidores
Seção intitulada “Medidores”Todos os medidores compartilham quatro atributos principais:
| Atributos | Descrição |
|---|---|
| Meter | Define o nome da variável, acessível via engine.vision.meter, onde meter é o nome escolhido. |
| Type | Especifica o tipo do medidor: linear, area, ocr_textmatch ou ocr_numeric |
| X | Coordenada X, em forma normalizada. O medidor é desenhado a partir do seu canto superior esquerdo. |
| Y | Coordenada Y, em forma normalizada. |
Coordenadas Normalizadas
Seção intitulada “Coordenadas Normalizadas”As coordenadas X e Y, juntamente com altura e largura, devem ser inseridas como valores normalizados. Por exemplo, se estou jogando a uma resolução de 1920x1080 e quero posicionar um pequeno medidor aproximadamente no meio, do lado esquerdo da tela, determino que a origem (canto superior esquerdo) do medidor está a 50 pixels da esquerda e 500 pixels abaixo do canto superior esquerdo da tela.
Isso me dá:
x = 50, y = 500.
Para convertê-los para coordenadas normalizadas, divido x pela largura da tela (1920) e y pela altura da tela (1080), o que resulta (arredondado e no formato correto) em:
x = “.026”, y = “.463”
Embora essa conversão deva teoricamente permitir que um medidor funcione em qualquer resolução com proporção 16:9, muitos jogos apresentam pequenas mudanças de UI entre resoluções. Como formatar medidores para diferentes resoluções será abordado na seção de solução de problemas no final desta página.
Medidor Linear
Seção intitulada “Medidor Linear”Um medidor linear retorna a porcentagem de pixels ao longo de uma linha horizontal que corresponde a um intervalo HSL especificado, com um valor de 0.0 a 1.0. Por exemplo, um medidor linear cobrindo toda a largura de uma barra de vida verde retornaria um valor de 0.5 com metade da vida.
<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">Os medidores lineares requerem quatro atributos adicionais:
| Atributo | Descrição |
|---|---|
| Width | O valor de largura, expresso em forma normalizada |
| H | O componente de matiz HSL, variando de 0 a 360 |
| S | O componente de saturação HSL, de 0% a 100% |
| L | O componente de luminosidade HSL, de 0% a 100% |
Medidor de Área
Seção intitulada “Medidor de Área”Um medidor de área retorna a porcentagem de pixels dentro de uma região retangular que se enquadram em um intervalo HSL especificado, com valores de 0.0 a 1.0. Esse tipo de medidor pode ser usado para detectar elementos de UI maiores, como caixas de texto ou zonas do minimapa.
<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">Os medidores de área requerem cinco atributos adicionais:
| Atributo | Descrição |
|---|---|
| Width | O valor de largura, expresso em forma normalizada |
| Height | O valor de altura, expresso em forma normalizada |
| H | O componente de matiz HSL, variando de 0 a 360 |
| S | O componente de saturação HSL, de 0% a 100% |
| L | O componente de luminosidade HSL, de 0% a 100% |
Medidor OCR de Correspondência de Texto
Seção intitulada “Medidor OCR de Correspondência de Texto”Este medidor usa Reconhecimento Óptico de Caracteres (OCR) para procurar uma string específica dentro de uma área retangular definida na tela. Se a string for encontrada, retorna 1; se não for encontrada, retorna 0; e se estiver incerto, retorna -1.
<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">Os medidores OCR de correspondência de texto requerem quatro atributos adicionais:
| Atributo | Descrição |
|---|---|
| Width | A largura, em forma normalizada. |
| Height | A altura, em forma normalizada. |
| String | A string a ser procurada. Diferencia maiúsculas e minúsculas. |
| Confidence | Um valor de 0-100 que especifica o grau de certeza que o medidor deve ter sobre uma correspondência. Padrão é 70 se não especificado. |
Medidor OCR Numérico
Seção intitulada “Medidor OCR Numérico”Este medidor usa Reconhecimento Óptico de Caracteres (OCR) para detectar valores numéricos dentro de uma área retangular na tela. Se bem-sucedido, retorna o número como inteiro; se falhar, retorna -1.
<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">Os medidores OCR numéricos requerem três atributos adicionais:
| Atributo | Descrição |
|---|---|
| Width | A largura, em forma normalizada. |
| Height | A altura, em forma normalizada. |
| Confidence | Um valor de 0-100 que especifica o grau de certeza que o medidor deve ter sobre uma correspondência. Padrão é 70 se não especificado. |
Propriedades de Conteúdo
Seção intitulada “Propriedades de Conteúdo”As propriedades de conteúdo são medidores de maior densidade que vêm diretamente da API.
Propriedades de Áudio
Seção intitulada “Propriedades de Áudio”- engine.audio.level retorna o nível de áudio atual em decibéis.
- engine.audio.width fornece a largura estéreo percebida do áudio de entrada, como uma proporção de 0 a 1.
- engine.audio.density fornece a densidade de frequência do áudio de entrada, também como uma proporção de 0 a 1 — ruído branco produz valores próximos de 1.0, enquanto tons puros retornam valores próximos de 0.
- engine.audio.freq retorna um array com 200 elementos, cada um representando o nível atual de uma banda de frequência específica.
Propriedades de Tela
Seção intitulada “Propriedades de Tela”- engine.zone.hue retorna um array de 560 elementos, cada um representando o valor de matiz de um ponto na tela. Esses pontos são amostrados de uma grade 28 x 20.
- engine.zone.saturation retorna um array de 560 elementos, cada um representando a saturação em um ponto da tela, amostrado da mesma grade 28 x 20.
- engine.zone.lightness retorna um array de 560 elementos, cada um indicando o valor de luminosidade em um ponto da tela, também amostrado da grade 28 x 20.
Solução de Problemas
Seção intitulada “Solução de Problemas”Ao escrever código, problemas podem ocorrer. Abaixo estão alguns problemas comuns com medidores e como corrigi-los:
-
“Meu medidor ou controle de usuário não aparece no app”
- Tente fechar completamente e reiniciar o aplicativo. Se o problema persistir, o medidor pode estar formatado incorretamente. Verifique ortografia e pontuação.
-
“O app ou LightScript continua travando”
- Isso é frequentemente causado por um medidor malformado. Atributos faltantes ou extras podem travar o app ou o código. Se seus medidores estiverem corretos, procure problemas como loops infinitos ou variáveis não declaradas.
-
“Meu medidor aparece, mas não rastreia a área correta da tela”
- As coordenadas normalizadas podem estar incorretas. Lembre-se: é x / largura da tela, y / altura da tela. Se matemática não é seu ponto forte, tente aumentar a largura ou altura do medidor para ajudar a identificar a área correta da tela. Apenas tenha em mente que medidores retangulares parecerão espremidos verticalmente no inspetor.
-
“Meu medidor funciona em uma resolução, mas não em outras”
- Felizmente, você não precisará de múltiplos medidores para UI dinâmica. Veja abaixo um exemplo de medidor linear adaptado para múltiplas resoluções.
<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>Como você pode ver, ajustei especificamente o medidor para resoluções 3840x2160 e 2560x1080. Todas as outras resoluções usarão o medidor original.
-
“Meu medidor está posicionado corretamente, mas não aciona”
- Como desenvolvedor de LightScript, este será um problema comum. Medidores de área e lineares podem ser instáveis em gradientes ou UI transparente. Abra um slider HSL (como este) e observe sua tela até que as cores correspondam. Comece com intervalos amplos de matiz, saturação e luminosidade até que o medidor acione de forma consistente, depois vá estreitando. Para medidores OCR, certifique-se de que toda a palavra ou número que você está buscando está incluída no medidor, com o mínimo de conteúdo adicional possível. Há um limite para o tamanho do texto ou resolução de tela nos quais os medidores OCR funcionarão. Colocar um medidor OCR em um texto grande “VITÓRIA” preenchendo uma tela 1920x1080? Sem problema. Mas tente em uma caixa de chat em 1280x720 e verá resultados limitados. Além disso, alto contraste entre texto e fundo é ideal para OCR — texto branco em fundo branco não será lido.
-
“Meu medidor aciona rápido demais ou o tempo todo”
- Parabéns, seu medidor funciona, mas acionar três vezes por segundo provavelmente não é o que você quer. UI transparente, ambientes coloridos, explosões e até cutscenes podem causar ativação falsa ou rápida dos seus medidores. Isso sempre será um desafio. Uma solução simples é usar a classe Meter, conforme descrito na próxima seção, Snippets.