CASE STUDY · โปรเจกต์ส่วนตัว
แสงสุดท้ายในพงไพร — Last Light of the Forest
เรื่องสั้นโต้ตอบ 3 มิติ ที่ผู้เล่นต้องเดินเก็บแสงหิ่งห้อยทีละดวงเพื่อฟื้นป่าที่กำลังจะตาย พร้อมระบบทางเลือกที่ส่งผลจริงต่อเนื้อเรื่อง นำไปสู่ 2 ตอนจบที่แตกต่างกัน พัฒนาด้วยตัวเองทั้งหมด ตั้งแต่ปั้นโมเดลและฉากใน Blender ออกแบบกลไกเกม ไปจนถึงเขียนสคริปต์ C# ใน Unity
โจทย์ / แนวคิด
โจทย์ที่ตั้งไว้ตั้งแต่ต้นคือ จะออกแบบเรื่องสั้นโต้ตอบยังไงให้ "การกระทำของผู้เล่น" มีน้ำหนักจริง ไม่ใช่แค่กดผ่านฉากไปเรื่อยๆ เรื่องราวของป่าที่กำลังจะตายจึงถูกเลือกมาสื่อแนวคิดที่ว่า สิ่งที่พังไปแล้วในชีวิตจริงไม่ได้ฟื้นเองลอยๆ ต้องมีใครสักคนลงมือทำอะไรบางอย่างจริงๆ กลไกหลักของเกมจึงให้ผู้เล่นต้องเดินหาแสงหิ่งห้อยทีละดวง แทนที่จะกดปุ่มเดียวจบ เพื่อให้การเก็บของในเกมเป็นตัวแทนของ "ความพยายาม" ที่ความหวังต้องแลกมา และให้ทางเลือกของผู้เล่น — ช่วยป่า หรือ เดินจากไป — ส่งผลจริงต่อตอนจบของเรื่อง ไม่ใช่แค่ทางแยกที่ไม่มีความหมาย
กระบวนการทำงาน
เริ่มจากปั้นโมเดลและ Material ในฉากด้วย Blender ให้เสร็จก่อน แล้วนำเข้ามาจัดวางในฉาก Unity จากนั้นแก้ปัญหาพื้นฐานของการเดิน กล้อง และการชนต้นไม้ให้เรียบร้อยก่อนต่อยอด ก่อนจะออกแบบกลไกเกมเพลย์ให้มีความหมาย ได้แก่ระบบบทสนทนา ระบบเก็บแสงหิ่งห้อย และตะเกียง ตามด้วยระบบเสียงผ่าน AudioManager และปิดท้ายด้วยระบบ 2 ตอนจบ ใช้เวลาทำทั้งหมดประมาณ 1 สัปดาห์
2 ตอนจบ
ระบบทางเลือกที่ส่งผลจริง
7 สคริปต์ C#
เขียนเองทั้งหมด ไม่รวม Editor Tool
ลำดับขั้นตอน
Blender — โมเดล/ฉาก
→
Unity — จัดฉาก/แก้การเดิน-กล้อง
→
ระบบเกมเพลย์ — บทสนทนา/หิ่งห้อย/ตะเกียง
→
ระบบเสียง
→
2 ตอนจบ
การแก้ปัญหาเชิงเทคนิค
สองปัญหาที่ใช้เวลาแก้นานที่สุดระหว่างพัฒนา ทั้งคู่เกี่ยวข้องกับการควบคุมตัวละคร และเป็นตัวอย่างของกระบวนการวินิจฉัยปัญหาก่อนลงมือแก้
ปัญหา #1
ตัวละครเดินแล้วล้มนอนลากไปกับพื้น
สาเหตุ: โมเดล FBX ที่นำเข้ามามี rotation ติดมา (เช่น หมุน 90 องศา) ทำให้แคปซูลชนของ CharacterController เอียงตามไปด้วย
วิธีแก้: ห่อโมเดลด้วยออบเจกต์เปล่าที่ไม่หมุน (Child_Root) แล้วย้าย CharacterController ไปแปะที่ออบเจกต์นั้นแทน
ปัญหา #2
ตัวละครเห็นแค่ครึ่งตัวตอนเดิน
วินิจฉัยผิดรอบแรก: คิดว่ากล้องถูกต้นไม้บัง จึงเสียเวลาทำระบบกล้องหลบสิ่งกีดขวางไปก่อน
สาเหตุจริง: โค้ดคำนวณขนาดแคปซูลผิด เพราะเดาว่าจุดหมุนของโมเดลอยู่ที่เท้า
วิธีแก้: คำนวณระยะจากจุดหมุนถึงจุดต่ำสุดจริงของโมเดล แทนการเดา
เครื่องมือที่พัฒนาเอง — Custom Unity Editor Tool
พอฉากเริ่มซับซ้อนขึ้นเรื่อยๆ — ต้นไม้เกือบ 50 ต้น พร็อพทุกชิ้นต้องมี Collider กันเดินทะลุ และต้องผูกตัวแปรอ้างอิงข้ามสคริปต์หลายตัว — การตั้งค่าด้วยมือทุกครั้งที่แก้โค้ดเริ่มเสี่ยงผิดพลาดและเสียเวลามาก จึงเขียน Editor Script ชื่อ LastLightSceneSetup.cs ขึ้นมาแปลงขั้นตอนที่เคยทำเองทั้งหมดให้เหลือแค่กดเมนู
Setup Scene
Setup Gameplay
Setup Fireflies
Setup Audio
กดปุ่มเดียวแล้วเครื่องมือจะจัดฉาก เพิ่ม Component ผูกตัวแปรอ้างอิง และเพิ่ม Collider ให้เองทั้งหมด จุดสำคัญคือออกแบบให้รันซ้ำได้อย่างปลอดภัย — วางไฟล์ทับแล้วกดเมนูเดิมซ้ำได้เลย มันจะอัปเดตค่าที่จำเป็นให้เองโดยไม่สร้างของซ้ำหรือทำของเดิมพัง ช่วยประหยัดเวลาในช่วงทดสอบ-แก้-ทดสอบซ้ำได้มาก และเป็นตัวอย่างที่ทำให้เห็นคุณค่าของการลงทุนเวลาทำ tooling แม้ในโปรเจกต์คนเดียว
ผลลัพธ์ — เส้นทาง 2 ตอนจบ
ทุกภาพด้านล่างเก็บมาจากการเล่นจริงในเกม (Unity Play mode) ไม่ได้จัดฉากหรือตัดต่อ เพื่อยืนยันว่าทั้ง 2 เส้นทางเล่นได้จริงตั้งแต่ต้นจนจบ
จุดตัดสินใจที่แยกเส้นทางของเรื่อง
เส้นทาง "ช่วยป่า"
เก็บแสงหิ่งห้อยระหว่างทาง ป่าค่อยๆ ฟื้นคืน
ตอนจบ: "ป่าได้กลับมามีชีวิตอีกครั้ง"
เส้นทาง "เดินจากไป"
บทพูดพิเศษเฉพาะเส้นทางนี้ของนางไม้
ตอนจบ: "ป่าแห่งนี้ยังคงเงียบงันต่อไป..."
สิ่งที่ได้เรียนรู้
โปรเจกต์นี้สอนอะไรหลายอย่างที่ไม่เคยได้จากงานอื่นมาก่อน อย่างแรกคือการแก้ปัญหาอย่างเป็นระบบ — จากการวินิจฉัยบั๊กตัวละครเห็นครึ่งตัวผิดในรอบแรก ทำให้รู้ว่าต้องหาหลักฐานยืนยันก่อนลงมือแก้ ไม่ใช่แก้ตามอาการที่เห็นผิวเผิน ต่อมาคือความเข้าใจเรื่องออกแบบกลไกเกมให้มีน้ำหนัก จากการปรับจาก "เดินแล้วป่าฟื้นเอง" เป็นระบบที่มีทางเลือกส่งผลจริง 2 แบบ ทำให้เห็นว่าการกระทำของผู้เล่นต้องเชื่อมกับความหมายของเรื่องราว ไม่ใช่แค่ทำให้เล่นได้ นอกจากนี้ยังได้เห็นคุณค่าของการลงทุนเวลาทำเครื่องมือช่วยตัวเอง (tooling) แม้ในโปรเจกต์คนเดียวเล็กๆ และได้ฝึกบริหารงานที่ต้องประสานหลายเครื่องมือต่อเนื่องกัน (Blender → Unity → C# → Ocenaudio → OBS) พร้อมเผื่อเวลาสำหรับรอบทดสอบ-แก้-ทดสอบซ้ำ ซึ่งกินเวลาและสำคัญกว่าที่คิดไว้ตอนเริ่มโปรเจกต์มาก
ลองเล่นด้วยตัวเองได้เลย
เล่นได้จริงในเบราว์เซอร์ ไม่ต้องติดตั้งอะไรเพิ่ม ลองเลือกทั้ง 2 เส้นทางดูว่าป่าจะเป็นยังไง
▶ เล่นตอนนี้ในเบราว์เซอร์