Lewati ke konten

Smart Tags

Selain kolom input pengguna, meta tag juga dapat mengambil data dari SignalRGB API. Ini dikenal sebagai meter, berbeda dari kelas Meter yang dibahas di bagian Snippets. Ada empat jenis meter visual yang tersedia: linear, area, ocr_textmatch, dan ocr_numeric.

Selain itu, API menawarkan tujuh Content Properties: audio level, audio width, audio density, audio frequency, zone hue, zone saturation, dan zone lightness.

Semua meter memiliki empat atribut inti:

AtributDeskripsi
MeterMendefinisikan nama variabel, dapat diakses melalui engine.vision.meter, di mana meter adalah nama yang Anda pilih.
TypeMenentukan tipe meter: linear, area, ocr_textmatch, atau ocr_numeric
XKoordinat X, dalam bentuk ternormalisasi. Meter digambar dari pojok kiri atas.
YKoordinat Y, dalam bentuk ternormalisasi.

Koordinat X dan Y, beserta height dan width, harus dimasukkan sebagai nilai ternormalisasi. Misalnya, jika saya memainkan game pada resolusi 1920x1080 dan ingin menempatkan meter kecil kira-kira di tengah ke bawah di sisi kiri layar, saya menentukan asal (pojok kiri atas) meter berada 50 piksel dari kiri dan 500 piksel ke bawah dari pojok kiri atas layar.

Ini memberikan saya:

x = 50, y = 500.

Untuk mengubah ini menjadi koordinat ternormalisasi, saya membagi x dengan lebar layar (1920) dan y dengan tinggi layar (1080), yang menghasilkan (dibulatkan dan dalam format yang benar):

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

Meskipun konversi ini secara teoritis memungkinkan meter bekerja untuk resolusi apa pun dengan rasio aspek 16:9, banyak game mengalami perubahan UI kecil antar resolusi. Cara memformat meter untuk resolusi berbeda akan dibahas di bagian pemecahan masalah di bagian bawah halaman ini.

Linear meter mengembalikan persentase piksel sepanjang garis horizontal yang cocok dengan rentang HSL yang ditentukan, dengan nilai dari 0.0 hingga 1.0. Misalnya, linear meter yang mencakup lebar penuh health bar hijau akan mengembalikan nilai 0.5 saat kesehatan setengah.

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

Linear meter memerlukan empat atribut tambahan:

AtributDeskripsi
WidthNilai lebar, dinyatakan dalam bentuk ternormalisasi
HKomponen hue HSL, berkisar dari 0 hingga 360
SKomponen saturation HSL, dari 0% hingga 100%
LKomponen lightness HSL, dari 0% hingga 100%

Area meter mengembalikan persentase piksel dalam area persegi panjang yang berada dalam rentang HSL yang ditentukan, dengan nilai dari 0.0 hingga 1.0. Jenis meter ini dapat digunakan untuk mendeteksi elemen UI yang lebih besar seperti kotak teks atau zona minimap.

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

Area meter memerlukan lima atribut tambahan:

AtributDeskripsi
WidthNilai lebar, dinyatakan dalam bentuk ternormalisasi
HeightNilai tinggi, dinyatakan dalam bentuk ternormalisasi
HKomponen hue HSL, berkisar dari 0 hingga 360
SKomponen saturation HSL, dari 0% hingga 100%
LKomponen lightness HSL, dari 0% hingga 100%

Meter ini menggunakan Optical Character Recognition (OCR) untuk mencari string tertentu dalam area persegi panjang yang ditentukan di layar. Jika string ditemukan, ia mengembalikan 1; jika tidak ditemukan, ia mengembalikan 0; dan jika tidak yakin, ia mengembalikan -1.

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

OCR text match meter memerlukan empat atribut tambahan:

AtributDeskripsi
WidthLebar, dalam bentuk ternormalisasi.
HeightTinggi, dalam bentuk ternormalisasi.
StringString yang dicari. Bersifat case-sensitive.
ConfidenceNilai dari 0-100 yang menentukan seberapa yakin meter tentang kecocokan. Default-nya 70 jika tidak ditentukan.

Meter ini menggunakan Optical Character Recognition (OCR) untuk mendeteksi nilai numerik dalam area persegi panjang di layar. Jika berhasil, ia mengembalikan angka sebagai integer; jika gagal, ia mengembalikan -1.

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

OCR numeric meter memerlukan tiga atribut tambahan:

AtributDeskripsi
WidthLebar, dalam bentuk ternormalisasi.
HeightTinggi, dalam bentuk ternormalisasi.
ConfidenceNilai dari 0-100 yang menentukan seberapa yakin meter tentang kecocokan. Default-nya 70 jika tidak ditentukan.

Content properties adalah meter dengan kepadatan lebih tinggi yang berasal langsung dari API.

  • engine.audio.level mengembalikan level audio saat ini dalam desibel.
  • engine.audio.width memberikan lebar stereo yang dirasakan dari audio masuk, sebagai rasio dari 0 hingga 1.
  • engine.audio.density memberikan kepadatan frekuensi dari audio masuk, juga sebagai rasio dari 0 hingga 1 - white noise menghasilkan nilai mendekati 1.0, sementara nada murni mengembalikan nilai mendekati 0.
  • engine.audio.freq mengembalikan array dengan 200 elemen, masing-masing mewakili level saat ini dari band frekuensi tertentu.
  • engine.zone.hue mengembalikan array 560 elemen, masing-masing mewakili nilai hue dari titik di layar. Titik-titik ini diambil sampelnya dari grid 28 x 20.
  • engine.zone.saturation mengembalikan array 560 elemen, masing-masing mewakili saturasi di titik layar, diambil sampelnya dari grid 28 x 20 yang sama.
  • engine.zone.lightness mengembalikan array 560 elemen, masing-masing menunjukkan nilai lightness di titik layar, juga diambil sampelnya dari grid 28 x 20.

Saat menulis kode, masalah dapat terjadi. Di bawah ini adalah beberapa masalah umum dengan meter dan cara memperbaikinya:

  • “Meter atau kontrol pengguna saya tidak muncul di aplikasi”

    • Coba tutup sepenuhnya dan restart aplikasi. Jika masalah berlanjut, meter mungkin diformat dengan salah. Periksa kembali ejaan dan tanda baca.
  • “Aplikasi atau LightScript terus crash”

    • Ini sering disebabkan oleh meter yang cacat. Atribut yang hilang atau berlebihan dapat membuat aplikasi atau kode crash. Jika meter Anda sudah benar, cari masalah seperti infinite loop atau variabel yang tidak dideklarasikan.
  • “Meter muncul tetapi tidak melacak area layar yang tepat”

    • Koordinat ternormalisasi mungkin salah. Ingat: ini adalah x / lebar layar, y / tinggi layar. Jika matematika bukan keahlian Anda, coba tambah lebar atau tinggi meter untuk membantu mengidentifikasi area layar yang benar. Ingatlah bahwa meter persegi panjang akan terlihat terpipih secara vertikal di inspector.
  • “Meter saya berfungsi pada satu resolusi, tetapi tidak pada resolusi lain”

    • Untungnya, Anda tidak memerlukan beberapa meter untuk UI yang dinamis. Lihat di bawah untuk contoh linear meter yang disesuaikan untuk beberapa resolusi.
<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>

Seperti yang dapat Anda lihat, saya telah menyesuaikan meter secara khusus untuk resolusi 3840x2160 dan 2560x1080. Semua resolusi lain akan menggunakan meter asli sebagai default.

  • “Meter saya ditempatkan dengan benar tetapi tidak memicu”

    • Sebagai pengembang LightScript, ini akan menjadi masalah yang umum. Meter area dan linear bisa rewel pada gradien atau UI transparan. Buka slider HSL (seperti ini) dan amati layar Anda hingga warnanya cocok. Mulai dengan rentang lebar dalam hue, saturation, dan lightness hingga meter secara konsisten terpicu, lalu persempit. Untuk meter OCR, pastikan seluruh kata atau angka yang Anda targetkan termasuk dalam meter, dengan konten tambahan sesedikit mungkin. Ada batasan pada ukuran teks atau resolusi layar di mana meter OCR akan berfungsi. Menempatkan meter OCR pada teks “VICTORY” besar yang mengisi layar 1920x1080? Tidak masalah. Tetapi cobalah pada kotak obrolan di 1280x720 dan Anda akan melihat hasil yang terbatas. Juga, kontras tinggi antara teks dan latar belakang sangat ideal untuk OCR – teks putih pada latar belakang putih tidak akan terbaca.
  • “Meter saya terpicu terlalu cepat atau sepanjang waktu”

    • Selamat, meter Anda berfungsi, tetapi memicu tiga kali per detik mungkin bukan yang Anda inginkan. UI transparan, lingkungan berwarna-warni, ledakan, dan bahkan cutscene dapat menyebabkan aktivasi meter yang salah atau cepat. Ini akan selalu menjadi tantangan. Salah satu solusi sederhana adalah menggunakan kelas Meter, seperti yang diuraikan di bagian berikutnya, Snippets.