Color Lookเบื้องหลังการสร้าง
จากไอเดีย ภาพ และเสียง สู่ตัวเกมและการเผยแพร่ เลือกดูแต่ละช่วง พร้อมปัญหาที่เจอและวิธีที่ใช้แก้
ภาพประกอบแผ่นศึกษาระยะสี 0.050 / 0.055 / 0.060 จากงาน QA ไม่ใช่ชุดด่านทั้งหมดที่ตรวจผ่าน
สื่อประกอบ
เมื่อสีเป็นกติกา ภาพต้องตรวจด้วยตัวเลขด้วย
เริ่มจากอะไร
สร้างภาพและ Gem ให้เห็นสีชัด แล้วตรวจคู่สีทุกคู่ทั้งในสูตรและหลังแปลงเป็นสีที่จอแสดงจริง
โจทย์ที่ต้องรับมือ
สีที่ดูต่างกันในสูตร อาจใกล้กันเกินไปเมื่อกลายเป็นไฟล์หรือสีบนจอ ทำให้ความยากมาจากการมองไม่ออก
วิธีแก้
กำหนดระยะห่างขั้นต่ำของสี และตรวจซ้ำทุกด่านหลังแปลงสี เพื่อไม่ให้ตัวสร้างโจทย์กับภาพที่เห็นใช้เกณฑ์คนละชุด
- กำหนด OKLab เป็นพื้นที่อ้างอิงของการสร้างและตรวจโจทย์
- ตรวจระยะทุกคู่ทั้งก่อนและหลังแปลงเป็น Color32 / 8-bit sRGB
- ทำแผ่นเทียบสีและ sweep ทุกด่าน แทนการสุ่มดูเพียงไม่กี่กระดาน
รายละเอียดเทคนิคและผลตรวจ
กระบวนการพัฒนา
Color Look เริ่มจากโจทย์เรียงสีและภาพ Gem ที่สัมผัสได้ งานภาพจึงต้องรักษาความสัมพันธ์ของสี ไม่ให้แสง เงา หรือการแปลงไฟล์ทำให้โจทย์อ่านยาก
- กำหนด OKLab เป็นพื้นที่อ้างอิงของการสร้างและตรวจโจทย์
- ตรวจระยะทุกคู่ทั้งก่อนและหลังแปลงเป็น Color32 / 8-bit sRGB
- ทำแผ่นเทียบสีและ sweep ทุกด่าน แทนการสุ่มดูเพียงไม่กี่กระดาน
ข้อจำกัดในการออกแบบ
ค่าสีต้นทางที่ต่างกันอาจใกล้เกินไปหรือกลายเป็นสีเดียวกันเมื่อถูก quantize เป็น 8 บิต จึงพึ่งการตรวจ RGB หรือภาพ concept อย่างเดียวไม่ได้
วิธีแก้ในระบบ
ล็อกระยะ OKLab ขั้นต่ำ 0.05 ของทุกคู่ รักษาค่าที่ตั้งไว้สูงกว่า และให้ generator กับ validator ใช้เงื่อนไขเดียวกัน พร้อมจำกัดจำนวน Gem
ผลและขอบเขตการตรวจ
audit 9 ต.ค. สร้าง 5,000 ด่าน ตรวจ 2,667,846 คู่ ไม่พบคู่ต่ำกว่า 0.05 หลังแปลง 8 บิต ผลนี้เป็นการตรวจ generator ไม่ใช่การรับรองการมองเห็นของผู้เล่นทุกคน
อ้างอิง: Docs/QA/ColorReadability-20261009/README.md
เสียงเล็ก ๆ ที่ทำให้เกมมีชีวิต
เสียงแตะเลือก Gem จาก select.wav ความยาว 0.18 วินาที เป็นเสียงสังเคราะห์จากชุดเริ่มต้น
สื่อประกอบ
ทำเสียงให้บอกการกระทำ โดยไม่กลบเกม
เริ่มจากอะไร
สร้างเสียงสังเคราะห์สั้น ๆ ให้การแตะ การใช้ตัวช่วย และรางวัลมีน้ำหนักต่างกัน โดยไม่กลบโจทย์สี
ปัญหาที่เจอ
กลับจาก Settings แล้วเพลงไม่คืนบริบท Gameplay ส่วนเสียงนับเหรียญต้องไม่ตัดเสียงรางวัลที่กำลังเล่น
วิธีแก้
กลับมาใช้เพลงเดิมของรอบ และแยกเสียงนับเหรียญที่ใช้ซ้ำได้ออกจากเสียงสำเร็จ พร้อมจำกัดความถี่
- ออกแบบบทบาทและความยาวแยกสำหรับ tap, select, Reveal, Preview และผลสำเร็จ
- ตรวจ duration และ peak ด้วย ffprobe/volumedetect ก่อนนำเข้า Unity
- แยกเสียง success ออกจาก tick นับ Gold และใช้ source ของเพลงซ้ำ
รายละเอียดเทคนิคและผลตรวจ
กระบวนการพัฒนา
เสียงชุดเริ่มต้นใช้แนว soft lab: transient สั้นสำหรับแตะและตัวช่วย แล้วเพิ่มน้ำหนักเฉพาะ Gold หรือ Perfect โดยสังเคราะห์คลิปด้วย oscillator และ envelope ใน FFmpeg
- ออกแบบบทบาทและความยาวแยกสำหรับ tap, select, Reveal, Preview และผลสำเร็จ
- ตรวจ duration และ peak ด้วย ffprobe/volumedetect ก่อนนำเข้า Unity
- แยกเสียง success ออกจาก tick นับ Gold และใช้ source ของเพลงซ้ำ
ปัญหาที่บันทึกไว้
ตอนกลับจาก Settings เพลง gameplay เคยไม่กลับไปยังบริบทเดิม ส่วนการนับ Gold ต้องไม่ตัดเสียง success หรือเปิดเสียงใหม่ทีละเหรียญจำนวนมาก
วิธีแก้ในระบบ
คืน BGM page เป็น Gameplay โดยใช้ run track เดิม แยก tick voice ที่ใช้ซ้ำ จำกัดความถี่ และคง mute/pause ตาม preference
ผลและขอบเขตการตรวจ
บันทึกเสียงต้นฉบับมีผลตรวจ peak/duration และงานแก้ 8 ต.ค. รวม BGM-return ใน targeted tests เสียงตัวอย่างด้านล่างคือ select transient ไม่ใช่เพลงทั้งหมดของรุ่นปัจจุบัน
อ้างอิง: Docs/Presentation/AudioAssetProvenance.md + Docs/QA/TextAndSettings-20261008.md
Preview ต้องแสดงเฉพาะด้านที่ผู้เล่นมองอยู่
เริ่มจากอะไร
แยกคำตอบของเกมออกจากภาพเคลื่อนไหว แล้วทดสอบตัวช่วย Preview บนกระดานหลายหน้าด้วยด่านที่สร้างซ้ำได้
ปัญหาที่เจอ
การพลิก Gem ทุกหน้าพร้อมกันทำให้ชิ้นของด้านที่ซ่อนโผล่พ้นขอบ cube ภาพจึงสับสนแม้คำตอบยังถูก
วิธีแก้
พลิกเฉพาะหน้าที่ผู้เล่นเห็น ส่วนหน้าซ่อนเปลี่ยนสถานะทันที เมื่อคืนภาพก็ยึดหน้าที่มองอยู่ตอนนั้น
- ใช้ seed เดิมสร้างกรณีทดสอบซ้ำ และเก็บลำดับการเลือกไว้ก่อนเปิด Preview
- ล็อก input ระหว่างแสดง effect แล้วให้ Keep/Clear ตัดสิน state ตามกติกา
- ตรวจทั้งเริ่ม Preview ยกเลิก คืนภาพ และสลับหน้าของ cube
รายละเอียดเทคนิคและผลตรวจ
กระบวนการพัฒนา
ระบบแยก Stage Seed ที่สร้างโจทย์ออกจาก Run Seed ที่สลับตำแหน่ง ส่วน animation เป็น presentation ที่ตาม state ไม่ใช่ตัวตัดสินคะแนน
- ใช้ seed เดิมสร้างกรณีทดสอบซ้ำ และเก็บลำดับการเลือกไว้ก่อนเปิด Preview
- ล็อก input ระหว่างแสดง effect แล้วให้ Keep/Clear ตัดสิน state ตามกติกา
- ตรวจทั้งเริ่ม Preview ยกเลิก คืนภาพ และสลับหน้าของ cube
ปัญหาที่บันทึกไว้
เมื่อ flip Gem ทุกหน้าพร้อมกัน Gem ของด้านที่ซ่อนอาจโผล่จากขอบ cube ทำให้ภาพสับสน แม้คำตอบใน core ยังถูกต้อง
วิธีแก้ในระบบ
animate เฉพาะหน้าที่มองเห็น ให้หน้าซ่อนเปลี่ยนเป็น completed state ทันที และตอนคืนภาพก็ animate เฉพาะหน้าที่มองอยู่ขณะนั้น
ผลและขอบเขตการตรวจ
บันทึก 7 ต.ค. ระบุ PlayMode 3/3 ผ่าน คลิปทดสอบเดิมใช้กระดาน 96 Gems ก่อนนโยบายจำกัด Gem วันที่ 9 ต.ค. จึงไม่นำกระดานเก่ามาอธิบายความยากรุ่นใหม่
อ้างอิง: Docs/QA/PreviewVisibleFace-20261007.md
ตรวจข้อความจริงทั้งฟอนต์ ภาษา และขนาดจอ
เริ่มจากอะไร
ตรวจหน้าจอทั้งชุดด้วยข้อความจริง ทั้งไทยและอังกฤษ รวมถึงการขยายตัวอักษรบนมือถือและแท็บเล็ต
ปัญหาที่เจอ
หัวข้อผลรอบถูกตัดท้าย ชื่อเพลงยาวชนชื่อศิลปิน และคำใบ้ให้ปัดหน้าถูกรวมกับเลขด่านในบรรทัดเดียว
วิธีแก้
ให้พื้นที่ตามข้อความ แยกคำใบ้ออกจากหัวข้อ และรักษากติกาการตัดบรรทัดเมื่อผู้เล่นเปลี่ยนขนาดฟอนต์
- เดินหน้าจอทั้งชุดที่ phone/tablet, ไทย/อังกฤษ และ text scale 100%/120%
- เก็บ overflow/truncation พร้อม context ของหน้าจอและขนาดพื้นที่ข้อความ
- รอปุ่ม interactable จริงก่อนตรวจ ไม่ใช้ fixed delay เดาสถานะ transition
รายละเอียดเทคนิคและผลตรวจ
กระบวนการพัฒนา
หน้าร้านเพลง ผลรอบ และ label ของ cube มีข้อความยาวต่างกัน การผ่าน layout ภาษาอังกฤษที่ขนาดปกติยังไม่พอสำหรับผู้เล่นไทยที่ขยายตัวอักษร
- เดินหน้าจอทั้งชุดที่ phone/tablet, ไทย/อังกฤษ และ text scale 100%/120%
- เก็บ overflow/truncation พร้อม context ของหน้าจอและขนาดพื้นที่ข้อความ
- รอปุ่ม interactable จริงก่อนตรวจ ไม่ใช้ fixed delay เดาสถานะ transition
ปัญหาที่บันทึกไว้
ผลรอบตัดตัวอักษรท้าย คำอธิบาย Home ภาษาไทยสูงไม่พอ และชื่อเพลงยาวชนพื้นที่ศิลปิน ส่วน label cube รวมเลขด่านกับคำใบ้ swipe ในกล่องบรรทัดเดียว
วิธีแก้ในระบบ
เพิ่มพื้นที่และ shaping ภาษาไทยตามชนิดข้อความ แยก swipe hint ออกเป็นอีกบรรทัด ให้ชื่อเพลง wrap และรักษา wrapping mode เมื่อปรับ text scale
ผลและขอบเขตการตรวจ
audit 8 ต.ค. ครอบคลุม 239 screen/locale/scale contexts ไม่เหลือ overflow/truncation หลัง rerun เป็นผล Unity PlayMode ไม่ใช่ native device pass
อ้างอิง: Docs/QA/TextAndSettings-20261008.md
เปิดเกมตอนล็อกจอ แล้วกลับมาค้าง
เริ่มจากอะไร
ทำซ้ำการเปิดเกมขณะล็อกจอบนเครื่องจริง แล้วดูว่า Android และ Unity แต่ละส่วนกำลังรออะไร
ปัญหาที่เจอ
ในกรณีที่ทำซ้ำบน A17 หลังปลดล็อกเกมค้าง และ trace ชี้ว่าฝั่ง Android กับ Unity กำลังรอกันเอง จึงตรวจวงจรเปิดแอปแทนการเดาว่าภาพโหลดช้า
วิธีแก้
เปลี่ยนทางเข้าแอปไปใช้ Unity Activity มาตรฐาน แล้วตรวจซ้ำทั้งไฟล์ติดตั้งในเครื่องและรุ่นที่ส่งผ่าน Google Play
- ทำซ้ำ locked cold start บน A17 แล้วเก็บ ANR และสถานะ thread
- สร้าง signed candidate แล้วทดสอบทั้ง APK ในเครื่องและรุ่นที่ติดตั้งผ่าน Google Play
- เปิด–ปิด focus ตรวจ Back, Settings, Privacy และการเล่นต่อใน process เดิม
รายละเอียดเทคนิคและผลตรวจ
กระบวนการพัฒนา
ปัญหานี้ต้องใช้ trace จากเครื่องจริง ไม่ใช่แก้จากภาพหน้าจอหรือเดาว่า asset โหลดช้า การตรวจจึงเริ่มที่ lifecycle ของ Android กับ Unity
- ทำซ้ำ locked cold start บน A17 แล้วเก็บ ANR และสถานะ thread
- สร้าง signed candidate แล้วทดสอบทั้ง APK ในเครื่องและรุ่นที่ติดตั้งผ่าน Google Play
- เปิด–ปิด focus ตรวจ Back, Settings, Privacy และการเล่นต่อใน process เดิม
ปัญหาที่บันทึกไว้
trace แสดง UI thread รอ surface destruction ขณะที่ Unity game thread รอ accessibility initialization เป็นหลักฐานสนับสนุน lifecycle deadlock ในกรณีที่ทำซ้ำได้
วิธีแก้ในระบบ
เปลี่ยน entry point จาก GameActivity เป็น Unity Activity มาตรฐาน ปรับ theme/metadata และจัดการ Android Back ให้ตรงกับรุ่นระบบ
ผลและขอบเขตการตรวจ
Play-delivered code 9 ผ่าน locked start, resume, navigation และจบด่านบน A17 โดยไม่พบ ANR ใหม่ในชุดนี้ ไม่ได้ยืนยันว่า ANR ทุกกรณีบนทุกเครื่องมีสาเหตุเดียวกัน
อ้างอิง: Docs/QA/A17-Startup-ANR-20261001.md
รวมทุกส่วน ก่อนส่งถึงมือผู้เล่น
จากงานแต่ละส่วนสู่แอปเดียว
ปล่อย Android 1.1.6 (21) เข้า Internal testing ก่อน แล้วติดตั้งผ่าน Google Play บน A17 เพื่อตรวจว่าได้ไฟล์รุ่นเดียวกับที่จะส่งจริง
ตัวแอปและหน้าร้านต้องตรงกัน
รุ่น 20 พบคำอธิบาย Tutorial ภาษาอังกฤษถูกตัดเมื่อขยายตัวอักษร 120% รุ่น 21 เพิ่มพื้นที่ข้อความแล้วตรวจภาษาไทย–อังกฤษซ้ำ ส่วน bulk fixtures บน S25 ใช้แพ็กเกจ QA แยก
สถานะในบันทึกการเผยแพร่
นำ artifact รุ่น 21 ที่ผ่านการติดตั้งจาก Store ส่ง Production review พร้อม symbols และ release notes ไทย–อังกฤษ วันที่ 8 ต.ค. สถานะ public ในรายงานยังเป็นรุ่น 19
อ้างอิงวันที่ในบันทึก ไม่ใช่สถานะ Store แบบเรียลไทม์
รายละเอียด Build และหลักฐาน
การรวมระบบ
- ใช้ Unity 6 และ URP แยก gameplay core ออกจากภาพ เสียง และเอฟเฟกต์ เพื่อไม่ให้ความถูกต้องของเกมรอ animation
- แยก Stage Seed ที่กำหนดโจทย์ ออกจาก Run Seed ที่สลับตำแหน่ง เพื่อย้อนสร้างด่านที่มีปัญหาได้
- ตรวจสีหลังแปลงเป็น Color32 ด้วย เพราะสีที่ต่างกันในสูตรอาจใกล้กันเกินไปเมื่อแสดงผลจริง
ผลตรวจ
รายงาน 9 ต.ค. 2026 ใช้ C# harness ที่เชื่อม core จริง สร้าง 5,000 ด่าน ตรวจสี 2,667,846 คู่ ไม่พบโจทย์ผิดหรือคู่สีต่ำกว่า OKLab 0.05 หลังแปลง 8-bit sRGB ตัวเลขนี้เป็นผลตรวจ generator ไม่ใช่คะแนนจากผู้เล่นหรือการวัดประสิทธิภาพมือถือ
การส่งขึ้น Store
รุ่น 21 เผยแพร่ใน Internal testing ก่อนติดตั้งจาก Google Play เพื่อตรวจบน A17 และ S25 แล้วจึงใช้ artifact เดิมส่ง Production review พร้อม native symbols และ release notes ไทย–อังกฤษ ณ วันที่บันทึก รุ่น public ยังเป็น 19 ขณะที่รุ่น 21 อยู่ระหว่างตรวจ
บันทึกอ้างอิง
- Docs/QA/ColorReadability-20261009/README.md
- Docs/Presentation/AudioAssetProvenance.md + Docs/QA/TextAndSettings-20261008.md
- Docs/QA/PreviewVisibleFace-20261007.md
- Docs/QA/TextAndSettings-20261008.md
- Docs/QA/A17-Startup-ANR-20261001.md
- README.md
- Docs/QA/Release21-20261008.md