ถ้าเพื่อนๆ เคยฝันอยากสร้างเกมแนว Command & Conquer หรือ Age of Empires ด้วยตัวเอง แต่พอเริ่มเขียน Code แล้วดันไปติดแหง็กตรงที่ว่าจะให้เม้าส์ลากคลุมยูนิตยังไง? หรือจะสั่งให้ทหาร 20 ตัวเดินไปพร้อมกันโดยไม่เดินซ้อนกันจนเป็นก้อนเดียวได้ยังไง? วันนี้ผู้เขียนไปเจอโปรเจกต์ตัวหนึ่งชื่อ rts Selection & Move Demo ใน itch.io และ GitHub มา ซึ่งเขาทำออกมาเพื่อตอบโจทย์พวกนี้โดยเฉพาะ และที่สำคัญคือเขา "เปิดวาร์ป" ให้เราเข้าไปดูไส้ในได้หมดทุกบรรทัดเลยครับ! 1. เริ่มต้นก้าวแรก: การ Setup ที่ง่ายจนน่าตกใจ สิ่งแรกที่ประทับใจมากคือ ความเบา ของโปรเจกต์ครับ เพื่อนๆ ไม่ต้องโหลดไฟล์หลาย GB มานั่งรอให้เสียเวลา ตัว Demo นี้ใช้ทรัพยากรน้อยมาก ขั้นตอนคือแค่โหลดมา แตกไฟล์ แล้วเปิด Godot Engine ขึ้นมา (แนะนำว่าควรเป็นเวอร์ชันที่รองรับ 2D ดีๆ อย่าง 3.x หรือ 4.x ตามที่เขาอัปเดต) พอเรากด Import แล้วเลือกไฟล์ project.godot ปุ๊บ ทุกอย่างก็พร้อมทำงานทันที ไม่ต้องตั้งค่า Plugin ให้วุ่นวาย พอเรากด F5 เพื่อรันโปรเจกต์ ภาพทหารตัวเล็กๆ ในฉากสไตล์ Pixel Art ก็จะปรากฏขึ้นมาพร้อมกับ UI ด้านข้างที่ดูสะอาดตาครับ 2. เจาะลึกระบบ Selection: การเลือกที่ "แม่นยำ" และ "เห็นภาพ" ในเกม RTS การเลือกยูนิตคือ "ประตูบานแรก" ของความสนุกเลยนะ ถ้าลากแล้วไม่ติด หรือลากแล้วไม่รู้ว่าตัวไหนโดนเลือกบ้าง เกมจะดูแย่ทันที Logic เบื้องหลัง: ใน Demo นี้เขาใช้การผสมผสานระหว่าง Control Node (สำหรับวาดกล่องสีขาวๆ เวลาเราลาก) กับ Area2D ที่ทำหน้าที่เป็นเหมือนตาข่ายดักจับยูนิตครับ Visual Feedback: สิ่งที่เขาทำได้ดีมากคือ "Underline Color" เวลาเพื่อนๆ เลือกยูนิตปุ๊บ ที่เท้าของยูนิตจะมีวงกลมหรือเส้นขีดเปลี่ยนสีทันที เพื่อบอกเราว่า "นายสั่งเราได้เลย!" นี่คือ UX (User Experience) พื้นฐานที่สำคัญมาก ความยืดหยุ่น: เพื่อนๆ สามารถคลิกเลือกทีละตัว หรือจะลากคลุมทั้งหมดก็ได้ ซึ่ง Code ในส่วนนี้เขียนไว้ค่อนข้าง Clean มาก ถ้าใครอยากเปลี่ยนจากการลากกล่องสี่เหลี่ยมเป็นวงกลม หรือรูปร่างอื่น ก็แค่ไปปรับ Logic ในส่วนของ Collision Shape ได้ไม่ยากเลยครับ 3. ระบบ Movement & Pathfinding: เดินยังไงให้ดูฉลาด? นี่คือจุดที่ยากที่สุดของการทำเกม RTS เลยนะ คือการสั่งให้ยูนิตเดินจากจุด A ไปจุด B โดยไม่ตกแมพ หรือเดินทะลุกำแพง Auto-tiled Tilemap: เขาใช้ระบบ Tilemap ของ Godot มาเป็นพื้นฐาน ซึ่งข้อดีคือทำให้การกำหนดพื้นที่ "เดินได้" (Walkable) กับ "เดินไม่ได้" (Obstacle) ทำได้ง่ายมาก แค่เราวาดพื้นลงไป ระบบ Pathfinding ก็จะรู้ทันทีว่าต้องเลี่ยงตรงไหน A (A-Star) Pathfinding:* ระบบที่อยู่เบื้องหลังการคำนวณเส้นทางคือ AStar ซึ่งเป็นอัลกอริทึมที่เร็วและแม่นยำที่สุดตัวหนึ่งสำหรับการหาทางสั้นที่สุด ใน Demo นี้แสดงให้เห็นว่า Godot จัดการเรื่องนี้ได้นิ่งมาก แม้จะสั่งเดินพร้อมกันหลายๆ ตัวครับ 4. ไฮไลท์เด็ด: ระบบ Formation (การจัดรูปขบวน) ถ้าแค่เดินตามเม้าส์ธรรมดาก็คงจะน่าเบื่อไปใช่ไหมครับ? แต่ความเจ๋งของ Demo นี้คือปุ่มเปลี่ยน Formation ที่อยู่ใน UI Square (สี่เหลี่ยม): เหมาะสำหรับการเคลื่อนพลแบบกองทัพทหารราบ ดูเป็นระเบียบ Circle (วงกลม): เหมาะสำหรับการสั่งยูนิตไปล้อมจุดยุทธศาสตร์ หรือป้องกันตัวละครสำคัญ Triangle (สามเหลี่ยม): ให้ฟีลลิ่งเหมือนกองทัพม้าที่กำลังจะพุ่งทะลวงฟัน เบื้องหลังความเทพ: เขาใช้คณิตศาสตร์เข้ามาช่วยนิดหน่อยครับ (เวกเตอร์และองศา) เพื่อคำนวณว่า "ถ้ามีทหาร 10 ตัว และอยากได้วงกลม แต่ละตัวต้องไปยืนที่ตำแหน่งพิกัดไหนรอบๆ จุดที่คลิก" ซึ่ง Code ส่วนนี้คือทองคำแท้ๆ สำหรับคนที่อยากเก่งเรื่องคณิตศาสตร์ในเกมเลยล่ะเพื่อนๆ 5. สรุปแล้วควรโหลดมาดูไหม? ถ้าเพื่อนๆ เป็นคนที่: กำลังหัด Godot: ต้องโหลดครับ! เพราะนี่คือตัวอย่างการใช้ Node ต่างๆ มาทำงานร่วมกันได้อย่างเห็นภาพที่สุด อยากทำเกมแนว Tactics/RTS: ต้องโหลดครับ! เพราะช่วยลดเวลาการลองผิดลองถูกเรื่อง Selection และ Movement ไปได้เป็นอาทิตย์เลย สายสะสม Asset: ต้องเก็บครับ! เพราะ Source Code แบบนี้หาที่เขียนสะอาดๆ ยากนะ ความรู้สึกส่วนตัว: ผู้เขียนว่าเหมือนเราได้สูตรอาหารจากเชฟเก่งๆ มาหนึ่งสูตรครับ เขาเตรียมวัตถุดิบหลักมาให้แล้ว หน้าที่ของเราคือเอาไปปรุงรสต่อ ใส่ตัวละครเท่ๆ ใส่สกิลมันๆ แล้วก็สร้างโลกของเกมขึ้นมา ภาพประกอบทั้งหมดโดยผู้เขียน