Smart Tags
นอกเหนือจากช่องรับอินพุตจากผู้ใช้แล้ว meta tag ยังสามารถดึงข้อมูลจาก SignalRGB API ได้อีกด้วย สิ่งเหล่านี้เรียกว่ามิเตอร์ (meter) ซึ่งแตกต่างจากคลาส Meter ที่กล่าวถึงในส่วน Snippets มิเตอร์แบบภาพมีให้ใช้สี่ประเภท ได้แก่ linear, area, ocr_textmatch และ ocr_numeric
นอกจากนี้ API ยังมี Content Properties เจ็ดรายการ ได้แก่ audio level, audio width, audio density, audio frequency, zone hue, zone saturation และ zone lightness
มิเตอร์
หัวข้อที่มีชื่อว่า “มิเตอร์”มิเตอร์ทั้งหมดมีแอตทริบิวต์หลักสี่ตัวร่วมกัน:
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
| Meter | กำหนดชื่อตัวแปร ซึ่งเข้าถึงได้ผ่าน engine.vision.meter โดย meter คือชื่อที่คุณเลือก |
| Type | ระบุประเภทของมิเตอร์: linear, area, ocr_textmatch หรือ ocr_numeric |
| X | พิกัด X ในรูปแบบนอร์มัลไลซ์ มิเตอร์จะถูกวาดจากมุมซ้ายบน |
| Y | พิกัด Y ในรูปแบบนอร์มัลไลซ์ |
พิกัดแบบนอร์มัลไลซ์
หัวข้อที่มีชื่อว่า “พิกัดแบบนอร์มัลไลซ์”พิกัด X และ Y รวมถึงความสูงและความกว้าง ต้องป้อนเป็นค่าแบบนอร์มัลไลซ์ ตัวอย่างเช่น หากเรากำลังเล่นเกมที่ ความละเอียด 1920x1080 และต้องการวางมิเตอร์ขนาดเล็กไว้ประมาณกึ่งกลางด้านซ้ายของหน้าจอ เราจะกำหนดจุดกำเนิด (มุมซ้ายบน) ของมิเตอร์ไว้ที่ 50 พิกเซลจากด้านซ้าย และ 500 พิกเซลลงมาจากมุมซ้ายบนของหน้าจอ
ซึ่งจะได้:
x = 50, y = 500.
ในการแปลงค่าเหล่านี้เป็นพิกัดแบบนอร์มัลไลซ์ ให้หาร x ด้วยความกว้างของหน้าจอ (1920) และหาร y ด้วยความสูงของหน้าจอ (1080) ซึ่งจะได้ผลลัพธ์ (ปัดเศษและอยู่ในรูปแบบที่ถูกต้อง) ดังนี้:
x = “.026”, y = “.463”
แม้ว่าในทางทฤษฎีแล้วการแปลงนี้จะทำให้มิเตอร์ทำงานได้กับทุกความละเอียดที่มีอัตราส่วนภาพ 16:9 แต่เกมจำนวนมากมีการเปลี่ยนแปลง UI เล็กน้อยระหว่างความละเอียดต่าง ๆ วิธีจัดรูปแบบมิเตอร์สำหรับความละเอียดต่าง ๆ จะอธิบายในส่วนการแก้ไขปัญหาที่ด้านล่างของหน้านี้
มิเตอร์แบบ Linear
หัวข้อที่มีชื่อว่า “มิเตอร์แบบ Linear”มิเตอร์แบบ linear จะคืนค่าเปอร์เซ็นต์ของพิกเซลตามแนวเส้นนอนที่ตรงกับช่วง HSL ที่กำหนด โดยมีค่า ตั้งแต่ 0.0 ถึง 1.0 ตัวอย่างเช่น มิเตอร์แบบ linear ที่ครอบคลุมความกว้างทั้งหมดของแถบพลังชีวิตสีเขียวจะคืนค่า 0.5 เมื่อพลังชีวิตเหลือครึ่งหนึ่ง
<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">มิเตอร์แบบ linear ต้องมีแอตทริบิวต์เพิ่มเติมสี่ตัว:
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
| Width | ค่าความกว้าง ในรูปแบบนอร์มัลไลซ์ |
| H | องค์ประกอบเฉดสี (hue) ของ HSL มีค่าตั้งแต่ 0 ถึง 360 |
| S | องค์ประกอบความอิ่มตัว (saturation) ของ HSL ตั้งแต่ 0% ถึง 100% |
| L | องค์ประกอบความสว่าง (lightness) ของ HSL ตั้งแต่ 0% ถึง 100% |
มิเตอร์แบบ Area
หัวข้อที่มีชื่อว่า “มิเตอร์แบบ Area”มิเตอร์แบบ area จะคืนค่าเปอร์เซ็นต์ของพิกเซลภายในพื้นที่สี่เหลี่ยมที่อยู่ในช่วง HSL ที่กำหนด โดยมีค่า ตั้งแต่ 0.0 ถึง 1.0 มิเตอร์ประเภทนี้ใช้ตรวจจับองค์ประกอบ UI ขนาดใหญ่ เช่น กล่องข้อความหรือพื้นที่บนมินิแมปได้
<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">มิเตอร์แบบ area ต้องมีแอตทริบิวต์เพิ่มเติมห้าตัว:
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
| Width | ค่าความกว้าง ในรูปแบบนอร์มัลไลซ์ |
| Height | ค่าความสูง ในรูปแบบนอร์มัลไลซ์ |
| H | องค์ประกอบเฉดสี (hue) ของ HSL มีค่าตั้งแต่ 0 ถึง 360 |
| S | องค์ประกอบความอิ่มตัว (saturation) ของ HSL ตั้งแต่ 0% ถึง 100% |
| L | องค์ประกอบความสว่าง (lightness) ของ HSL ตั้งแต่ 0% ถึง 100% |
มิเตอร์ OCR Text Match
หัวข้อที่มีชื่อว่า “มิเตอร์ OCR Text Match”มิเตอร์นี้ใช้ Optical Character Recognition (OCR) เพื่อค้นหาสตริงที่ระบุภายในพื้นที่สี่เหลี่ยมที่กำหนดบนหน้าจอ หากพบสตริงจะคืนค่า 1 หากไม่พบจะคืนค่า 0 และหากไม่แน่ใจจะคืนค่า -1
<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">มิเตอร์ OCR text match ต้องมีแอตทริบิวต์เพิ่มเติมสี่ตัว:
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
| Width | ความกว้าง ในรูปแบบนอร์มัลไลซ์ |
| Height | ความสูง ในรูปแบบนอร์มัลไลซ์ |
| String | สตริงที่ต้องการค้นหา คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ |
| Confidence | ค่าตั้งแต่ 0-100 ที่ระบุว่ามิเตอร์ต้องมั่นใจเพียงใดว่าตรงกัน หากไม่ระบุค่าเริ่มต้นคือ 70 |
มิเตอร์ OCR Numeric
หัวข้อที่มีชื่อว่า “มิเตอร์ OCR Numeric”มิเตอร์นี้ใช้ Optical Character Recognition (OCR) เพื่อตรวจจับค่าตัวเลขภายในพื้นที่สี่เหลี่ยมบนหน้าจอ หากสำเร็จจะคืนค่าตัวเลขเป็นจำนวนเต็ม หากล้มเหลวจะคืนค่า -1
<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">มิเตอร์ OCR numeric ต้องมีแอตทริบิวต์เพิ่มเติมสามตัว:
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
| Width | ความกว้าง ในรูปแบบนอร์มัลไลซ์ |
| Height | ความสูง ในรูปแบบนอร์มัลไลซ์ |
| Confidence | ค่าตั้งแต่ 0-100 ที่ระบุว่ามิเตอร์ต้องมั่นใจเพียงใดว่าตรงกัน หากไม่ระบุค่าเริ่มต้นคือ 70 |
Content Properties
หัวข้อที่มีชื่อว่า “Content Properties”Content properties คือมิเตอร์ที่มีความหนาแน่นของข้อมูลสูงกว่า ซึ่งมาจาก API โดยตรง
คุณสมบัติด้านเสียง
หัวข้อที่มีชื่อว่า “คุณสมบัติด้านเสียง”- engine.audio.level คืนค่าระดับเสียงปัจจุบันในหน่วยเดซิเบล
- engine.audio.width ให้ค่าความกว้างของสเตอริโอที่รับรู้ได้ของเสียงขาเข้า เป็นอัตราส่วนตั้งแต่ 0 ถึง 1
- engine.audio.density ให้ค่าความหนาแน่นของความถี่ของเสียงขาเข้า เป็นอัตราส่วนตั้งแต่ 0 ถึง 1 เช่นกัน โดยไวต์นอยส์จะให้ค่าใกล้ 1.0 ส่วนเสียงโทนบริสุทธิ์จะคืนค่าใกล้ 0
- engine.audio.freq คืนค่าอาร์เรย์ที่มี 200 สมาชิก แต่ละตัวแทนระดับปัจจุบันของย่านความถี่เฉพาะ
คุณสมบัติด้านหน้าจอ
หัวข้อที่มีชื่อว่า “คุณสมบัติด้านหน้าจอ”- engine.zone.hue คืนค่าอาร์เรย์ 560 สมาชิก แต่ละตัวแทนค่าเฉดสีของจุดหนึ่งบนหน้าจอ จุดเหล่านี้สุ่มตัวอย่างจากตาราง 28 x 20
- engine.zone.saturation คืนค่าอาร์เรย์ 560 สมาชิก แต่ละตัวแทนค่าความอิ่มตัวของสีที่จุดหนึ่งบนหน้าจอ สุ่มตัวอย่างจากตาราง 28 x 20 เดียวกัน
- engine.zone.lightness คืนค่าอาร์เรย์ 560 สมาชิก แต่ละตัวแสดงค่าความสว่างที่จุดหนึ่งบนหน้าจอ สุ่มตัวอย่างจากตาราง 28 x 20 เช่นกัน
การแก้ไขปัญหา
หัวข้อที่มีชื่อว่า “การแก้ไขปัญหา”ระหว่างการเขียนโค้ดอาจเกิดปัญหาขึ้นได้ ด้านล่างนี้คือปัญหาที่พบบ่อยเกี่ยวกับมิเตอร์และวิธีแก้ไข:
-
“มิเตอร์หรือตัวควบคุมของผู้ใช้ไม่แสดงในแอป”
- ลองปิดแอปพลิเคชันให้สนิทแล้วเปิดใหม่ หากปัญหายังคงอยู่ มิเตอร์อาจจัดรูปแบบไม่ถูกต้อง ตรวจสอบการสะกดและเครื่องหมายวรรคตอนอีกครั้ง
-
“แอปหรือ LightScript แครชอยู่เรื่อย ๆ”
- มักเกิดจากมิเตอร์ที่มีรูปแบบผิดพลาด แอตทริบิวต์ที่ขาดหายไปหรือเกินมาอาจทำให้แอปหรือโค้ดแครชได้ หากมิเตอร์ของคุณถูกต้อง ให้มองหาปัญหาอย่างลูปไม่สิ้นสุดหรือตัวแปรที่ไม่ได้ประกาศ
-
“มิเตอร์แสดงขึ้นแต่ไม่ได้ติดตามพื้นที่ที่ถูกต้องบนหน้าจอ”
- พิกัดแบบนอร์มัลไลซ์อาจไม่ถูกต้อง โปรดจำไว้ว่า: x / ความกว้างหน้าจอ, y / ความสูงหน้าจอ หากคณิตศาสตร์ไม่ใช่จุดแข็งของคุณ ลองเพิ่มความกว้างหรือความสูงของมิเตอร์เพื่อช่วยระบุพื้นที่หน้าจอที่ถูกต้อง เพียงแต่โปรดทราบว่ามิเตอร์ทรงสี่เหลี่ยมจะดูเหมือนถูกบีบในแนวตั้งใน inspector
-
“มิเตอร์ทำงานที่ความละเอียดหนึ่ง แต่ไม่ทำงานที่ความละเอียดอื่น”
- โชคดีที่คุณไม่จำเป็นต้องใช้มิเตอร์หลายตัวสำหรับ UI แบบไดนามิก ดูตัวอย่างมิเตอร์แบบ linear ที่ปรับให้รองรับหลายความละเอียดด้านล่าง
<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>ดังที่คุณเห็น เราได้ปรับมิเตอร์สำหรับความละเอียด 3840x2160 และ 2560x1080 โดยเฉพาะ ความละเอียดอื่น ๆ ทั้งหมดจะใช้มิเตอร์ต้นฉบับเป็นค่าเริ่มต้น
-
“มิเตอร์วางตำแหน่งถูกต้องแต่ไม่ทำงาน”
- ในฐานะนักพัฒนา LightScript นี่จะเป็นปัญหาที่พบบ่อย มิเตอร์แบบ area และ linear อาจทำงานไม่แน่นอนกับการไล่ระดับสีหรือ UI โปร่งใส เปิดแถบเลื่อน HSL (เช่นอันนี้) แล้วสังเกตหน้าจอของคุณจนกว่าสีจะตรงกัน เริ่มต้นด้วยช่วงที่กว้างของเฉดสี ความอิ่มตัว และความสว่าง จนกว่ามิเตอร์จะทำงานอย่างสม่ำเสมอ แล้วจึงค่อย ๆ แคบช่วงลง สำหรับมิเตอร์ OCR ตรวจสอบให้แน่ใจว่าคำหรือตัวเลขทั้งหมดที่คุณต้องการอยู่ภายในมิเตอร์ โดยมีเนื้อหาอื่นเพิ่มเติมให้น้อยที่สุด มิเตอร์ OCR มีข้อจำกัดด้านขนาดข้อความหรือความละเอียดหน้าจอที่จะทำงานได้ วางมิเตอร์ OCR บนข้อความ “VICTORY” ขนาดใหญ่ที่เต็มหน้าจอ 1920x1080 หรือ? ไม่มีปัญหา แต่ลองใช้กับกล่องแชทที่ 1280x720 แล้วคุณจะเห็นว่าผลลัพธ์มีจำกัด นอกจากนี้ ความต่างของสีระหว่างข้อความและพื้นหลังที่สูงเหมาะที่สุดสำหรับ OCR ข้อความสีขาวบนพื้นหลังสีขาวจะไม่สามารถอ่านได้
-
“มิเตอร์ทำงานเร็วเกินไปหรือทำงานตลอดเวลา”
- ยินดีด้วย มิเตอร์ของคุณใช้งานได้ แต่การทำงานสามครั้งต่อวินาทีอาจไม่ใช่สิ่งที่คุณต้องการ UI โปร่งใส สภาพแวดล้อมที่มีสีสัน การระเบิด และแม้แต่คัตซีน อาจทำให้มิเตอร์ทำงานผิดพลาดหรือทำงานถี่เกินไป ซึ่งจะเป็นความท้าทายเสมอ วิธีแก้ง่าย ๆ อย่างหนึ่งคือการใช้คลาส Meter ตามที่อธิบายไว้ในส่วนถัดไป Snippets