101-game-dev-basics
ทำเกมเองจากศูนย์ เส้นทางสำหรับคนที่ไม่เคยเขียนเกมมาก่อน
ความคิดที่ว่าอยากลงมือทำเกมสักตัวมักโผล่ขึ้นมาหลังจากเล่นเกมที่ชอบจนจบ แต่พอเปิดหาข้อมูลจริงก็เจอทั้งชื่อเอนจิน ภาษาโปรแกรม และคอร์สเรียนเต็มไปหมดจนเลือกไม่ถูก เราจะคุยกันเรื่องขนาดของงาน การเลือกเอนจิน และวิธีทำให้เกมแรกเสร็จโดยไม่ทิ้งกลางทางทำไมโปรเจกต์แรกถึงควรเล็กจนน่าอายคนเริ่มทำเกมเกือบทุกคนวางแผนโปรเจกต์แรกใหญ่เกินกำลังตัวเองไปหลายเท่า สิ่งที่ตามมาคือความรู้สึกว่าไม่มีวันเสร็จ แล้วโปรเจกต์ก็ค้างอยู่ในโฟลเดอร์ตลอดไป ของเล็ก ๆ ที่ปล่อยออกไปได้จริงให้บทเรียนครบกว่างานใหญ่ที่ค้างอยู่ครึ่งทางที่เป็นแบบนั้นเพราะช่วงท้ายของโปรเจกต์คือส่วนที่ยากที่สุดและน่าเบื่อที่สุด เมนู ระบบบันทึกเกม เสียงตอนกดปุ่ม และการไล่แก้บักจุกจิกล้วนอยู่ในช่วงนั้นทั้งหมด พอทำจบสักตัวเราจะเริ่มรู้ว่าไอเดียแต่ละแบบใช้เวลาจริงประมาณเท่าไรขั้นตอนเริ่มต้นทำเกมทีละข้อ1. เลือกเอนจินจากสิ่งที่อยากทำ ไม่ใช่จากที่คนพูดถึงมากที่สุดลำดับที่ถูกคือกำหนดชนิดเกมก่อน แล้วเอนจินจะเหลือตัวเลือกไม่กี่ตัวเอง ถ้าอยากทำเกมสองมิติแบบเลื่อนหน้าจอ เครื่องมือที่เบาและเรียนง่ายจะพาไปถึงเส้นชัยเร็วกว่า ส่วนงานสามมิติจะต้องแลกด้วยเวลาเรียนรู้ที่นานกว่าและเครื่องที่แรงกว่าพอสมควรให้เช็กด้วยว่าเวลาติดปัญหาแล้วมีคนถามคำถามคล้ายกันไว้ก่อนหน้าเยอะแค่ไหน การย้ายเครื่องมือกลางทางทำให้เราเสียเวลาเรียนรู้ซ้ำโดยที่เกมไม่คืบไปไหนเลย ความรู้เรื่องการวางระบบและจังหวะเกมติดตัวเราไป ไม่ได้ผูกกับเอนจินตัวใดตัวหนึ่ง2. เรียนรู้จากการทำให้จบ ไม่ใช่จากการดูวิดีโอสอนไปเรื่อย ๆกับดักที่พบบ่อยที่สุดคือการดูบทเรียนต่อกันหลายสิบชั่วโมงโดยไม่เคยเปิดโปรแกรมเอง ความเข้าใจจริงเกิดตอนเราพิมพ์เอง พังเอง แล้วนั่งไล่หาว่าผิดตรงไหน วิธีที่ได้ผลคือดูบทเรียนสั้น ๆ หนึ่งอัน แล้วดัดแปลงสิ่งที่ทำตามให้เป็นของตัวเองตั้งกติกาว่าจะนั่งทำวันละหนึ่งชั่วโมง แล้ววัดผลจากความสม่ำเสมอไม่ใช่ความคืบหน้า เส้นตายที่ชัดเจนช่วยได้มากกว่าที่คิด เพราะมันหยุดเราจากการขัดเกลาไม่รู้จบ ผลงานที่ออกมาอาจหยาบ แต่มันคือเกมที่เล่นได้จริงและมีจุดเริ่มต้นกับจุดจบครบ3. เขียนกติกาของเกมออกมาให้ชัดก่อนเริ่มเขียนโค้ดก่อนแตะเครื่องมือใด ๆ ให้ลองอธิบายเกมของเราให้จบในสามประโยคก่อน ถ้าอธิบายไม่ได้ในสามประโยค แปลว่าเกมยังกว้างเกินกว่าจะลงมือทำตอนนี้ การจดกติกาไว้ยังช่วยให้เรากลับมาดูได้ว่าสิ่งที่ทำอยู่ยังตรงกับแผนเดิมไหม4. เรื่องภาพและเสียงเมื่อเราวาดไม่เป็นและแต่งเพลงไม่เป็นคนที่เขียนโค้ดได้แต่วาดรูปไม่เป็นมักติดอยู่ตรงนี้จนไม่กล้าเริ่มโปรเจกต์ เริ่มจากของสำเร็จรูปไปก่อนแล้วค่อยเปลี่ยนเป็นงานของตัวเองทีหลังก็ยังทันเสมอ ศิลปะแบบมินิมอลที่ใช้สีไม่กี่สีดูดีได้จริงและใช้เวลาทำน้อยกว่าหลายเท่า5. ขอบเขตงานที่บานปลายคือสาเหตุที่โปรเจกต์ตายมันมาในรูปของไอเดียดี ๆ ที่ผุดขึ้นระหว่างทางแล้วเราอดใจไม่ไหวที่จะใส่เข้าไป ปัญหาคือของใหม่ทุกชิ้นต้องไปทำงานร่วมกับทุกอย่างที่มีอยู่แล้ว งานจึงโตแบบทวีคูณ ให้มีสมุดพักไอเดีย เอาไว้จดของที่คิดออกแล้วเก็บไว้ทำในโปรเจกต์หน้าการตัดใจไม่ใช่การยอมแพ้ แต่คือทักษะหลักของคนที่ทำงานสร้างสรรค์ให้เสร็จได้ เกณฑ์ที่ใช้ได้ผลคือเก็บเฉพาะสิ่งที่ขาดไม่ได้จริง ที่เหลือเลื่อนไปหลังปล่อยเวอร์ชันแรก เมื่อเวอร์ชันแรกออกไปแล้ว เราจะรู้จากคนเล่นเองว่าควรเพิ่มอะไรก่อน6. วางระบบเก็บไฟล์และสำรองงานตั้งแต่วันแรกเรื่องที่มือใหม่มองข้ามที่สุดคือการเก็บประวัติการแก้ไขงานของตัวเอง แค่รู้คำสั่งพื้นฐานไม่กี่คำสั่งก็พอแล้วสำหรับคนที่ทำเกมอยู่คนเดียว ถ้ายังไม่พร้อมเรียนเครื่องมือ ให้ตั้งการคัดลอกโฟลเดอร์งานไปไว้อีกที่หนึ่งทุกคืน7. ให้คนอื่นลองเล่นตั้งแต่เกมยังไม่สวยเรามีแนวโน้มจะเก็บงานไว้กับตัวจนกว่าจะพอใจ แต่ตอนนั้นก็แก้อะไรใหญ่ ๆ ไม่ไหวแล้ว สิ่งที่ต้องทดสอบไม่ใช่ความสวย แต่คือคนเล่นเข้าใจไหมว่าต้องทำอะไรต่อ กฎสำคัญคือห้ามอธิบาย เพราะตอนเกมออกไปจริงเราไม่ได้นั่งข้าง ๆ ผู้เล่นทุกคน8. ปล่อยของที่ยังไม่สมบูรณ์ออกไปไม่มีเกมไหนพร้อมร้อยเปอร์เซ็นต์ในสายตาคนทำ มีแต่เกมที่ดีพอจะปล่อยได้แล้ว การปล่อยของออกไปคือส่วนหนึ่งของกระบวนการเรียนรู้ ไม่ใช่บททดสอบคุณค่าของเรา ข้อมูลชุดนี้หาไม่ได้จากที่ไหนนอกจากการปล่อยเกมออกไปให้คนเล่นจริงก่อนปล่อยควรเตรียมภาพประกอบและคำอธิบายสั้น ๆ ที่บอกได้ทันทีว่าเกมนี้เล่นยังไง ตัวเลขไม่ใช่ตัวชี้วัดของโปรเจกต์แรก สิ่งที่วัดคือเราทำมันจนจบได้หรือเปล่า เกมตัวถัดไปจะดีขึ้นเองโดยอัตโนมัติ เพราะเราผ่านทุกขั้นตอนมาแล้วหนึ่งรอบเต็ม9. สิ่งที่ได้เรียนรู้ซึ่งไม่มีในคอร์สไหนบทเรียนที่ใหญ่ที่สุดคือการรู้ว่าตัวเองทำงานได้จริงประมาณวันละเท่าไร ความสม่ำเสมอในวันที่รู้สึกเฉย ๆ คือสิ่งที่แยกคนทำจบออกจากคนทำไม่จบ งานที่เสร็จจริงมักต่างจากที่วาดฝันไว้ แต่มันมีอยู่จริง ต่างจากภาพในหัวที่ไม่เคยเกิดขึ้นข้อผิดพลาดที่มือใหม่มักเจอข้อแรกคือใช้เวลาเลือกเอนจินนานกว่าเวลาที่ใช้ทำเกมจริงเสียอีก อีกข้อคือออกแบบระบบเผื่ออนาคตจนลืมทำส่วนที่ทำให้เกมสนุกในตอนนี้ ข้อที่สามคือจมอยู่กับรายละเอียดของด่านแรกจนไม่เคยไปถึงด่านที่สองข้อที่สี่คือลืมว่าเกมที่เราชื่นชมนั้นผ่านการทำงานของคนจำนวนมากมาหลายปี ข้อที่ห้าคือเก็บงานไว้คนเดียวจนเสียโอกาสแก้ปัญหาที่คนนอกเห็นตั้งแต่แรก ข้อสุดท้ายคือหนีความน่าเบื่อด้วยการไปหลงรักไอเดียใหม่ที่ยังไม่มีปัญหาคนอยากทำเกมในบ้านเราเริ่มต้นยังไงได้บ้างเอนจินยอดนิยมหลายตัวไม่มีค่าใช้จ่ายจนกว่าเกมจะทำรายได้ถึงระดับหนึ่ง ให้เริ่มด้วยของที่มีอยู่ก่อน แล้วค่อยอัปเกรดเมื่อรู้ชัดว่าติดขัดตรงไหนจริง ๆ ควรจัดที่วางเครื่องให้ระบายอากาศได้ดี เพราะการทำงานนาน ๆ ทำให้เครื่องร้อนกว่าปกติเอกสารทางการของเครื่องมือแทบทั้งหมดเป็นภาษาอังกฤษ จึงต้องใช้เวลาปรับตัวช่วงแรก ทางออกคือเริ่มจากคลิปภาษาไทยเพื่อจับภาพรวม แล้วค่อยขยับไปอ่านเอกสารต้นทาง การมีคนคุยด้วยที่กำลังเจอปัญหาคล้ายกันทำให้เราไม่รู้สึกว่าต้องสู้อยู่คนเดียวคำถามที่ตามมาเสมอคือควรลาออกจากงานประจำมาทำเกมเต็มตัวไหม ให้สร้างแฟ้มผลงานก่อน แล้วโอกาสทั้งงานประจำและงานอิสระจะตามมาเอง เส้นทางเข้าสู่สายงานนี้กว้างกว่าเมื่อก่อนมาก และผลงานส่วนตัวคือใบเบิกทางที่ดีที่สุดงบประมาณก็เป็นเรื่องที่ต้องคิดตั้งแต่ต้นถ้าตั้งใจจะปล่อยเกมขายจริง ทางที่ประหยัดที่สุดคือปล่อยเกมแรกแบบให้เล่นฟรีบนแพลตฟอร์มที่ไม่มีค่าเปิดร้าน พอถึงจุดที่มีรายได้จริง ควรศึกษาเรื่องเอกสารและการโอนเงินข้ามประเทศให้ครบคำถามที่พบบ่อยจำเป็นต้องเรียนเขียนโปรแกรมให้จบก่อนไหม ตอบสั้น ๆ ว่าไม่ต้อง ด้วยเครื่องมือแบบภาพเราเรียนรู้ตรรกะการทำงานได้ก่อน แล้วค่อยขยับไปเขียนโค้ดจริงภาษาไหนเหมาะกับการทำเกมที่สุด คำตอบคือภาษาที่เอนจินของคุณใช้อยู่ เพราะการเรียนภาษาที่เอนจินไม่รองรับจะทำให้เราเอาไปใช้กับโปรเจกต์จริงไม่ได้ทำเกมคนเดียวไหวไหมหรือต้องหาทีม ตอบว่าเกมเล็กทำคนเดียวได้สบาย ด้วยเหตุที่เราต้องแบ่งงานและรอกันไปมา จังหวะการเรียนรู้จึงช้าลงกว่าทำเองใช้เวลานานแค่ไหนกว่าจะทำเกมแรกเสร็จ ขึ้นอยู่กับขนาดที่เราเลือกทำ งานขนาดเล็กมากที่มีกลไกเดียวมักใช้เวลาไม่กี่สัปดาห์ถ้าทำสม่ำเสมอทุกวันคอร์สเสียเงินคุ้มกว่าของฟรีจริงหรือเปล่า ตอบว่าช่วงแรกของฟรีก็พอแล้ว ด้วยเหตุที่เนื้อหาฟรีมีมากเกินพอ เกมออนไลน์ยอดนิยม เงินที่ควรจ่ายคือเวลา ไม่ใช่ค่าคอร์สเกมที่ทำเสร็จแล้วควรเอาไปลงที่ไหน ให้เริ่มจากแพลตฟอร์มที่เปิดรับงานอิสระ แล้วเอาลิงก์ไปแบ่งปันในกลุ่มคนทำเกมเพื่อขอความเห็นกลับมาปรับปรุงต่อสรุปทางที่สั้นที่สุดสู่การเป็นคนทำเกมคือการทำเกมเล็ก ๆ ให้จบสักหนึ่งตัว เลือกเอนจินที่เข้ากับเกมในหัว ตัดขอบเขตให้เล็กที่สุด แล้วตั้งใจทำให้ถึงเส้นชัย ผลงานชิ้นแรกมักหยาบ ทว่าคุณจะได้ทักษะที่พาไปทำชิ้นต่อไปได้ดีขึ้นแน่นอน