อัปเดต Godot 4.1
(godotengine.org)- Godot 4.1 เป็นรีลีสแบบค่อยเป็นค่อยไปที่ออกมาหลัง 4.0 เพียง 4 เดือน โดยปรับปรุง ความเสถียร·ประสิทธิภาพ·ความสมบูรณ์ของงาน พร้อมเพิ่มฟีเจอร์อย่างการหลบหลีกในการนำทาง AI และตัวแก้ไขโค้ดแบบแยกหน้าต่าง
- เวอร์ชันนี้แก้ไข ปัญหากว่า 900 รายการ ที่ถูกรายงานระหว่างการใช้งาน Godot 4 หรือถูกพบในช่วงพรีรีลีสของ 4.1 และเกิดขึ้นได้ด้วยการส่งผลงานจากผู้มีส่วนร่วมมากกว่า 300 คน
- การปรับปรุงประสิทธิภาพที่สำคัญคือการเปลี่ยนการเพิ่ม·ลบโหนดย่อยไปใช้โครงสร้าง hash map ที่เร็วกว่า ทำให้โปรเจ็กต์ซับซ้อนทำงานเร็วขึ้น แต่มีต้นทุนกับงานบางอย่างที่พบไม่บ่อยและ การใช้หน่วยความจำของ Node
- เพิ่มขอบเขตของ เวิร์กโฟลว์ด้านสคริปต์และเอดิเตอร์ เช่น ตัวแปรแบบ static ใน GDScript,
[GlobalClass]ใน C#, การขยายผ่าน GDExtension และตัวแก้ไขสคริปต์ที่แยกออกได้ - โดยทั่วไปการย้ายโปรเจ็กต์จาก 4.0 ไป 4.1 ค่อนข้างปลอดภัย แต่ผู้ใช้ C# และ GDExtension ควรตรวจสอบความเป็นไปได้ของความไม่เข้ากัน รวมถึงเรื่อง การพอร์ต·คอมไพล์ใหม่ ก่อน
ภาพรวมรีลีส Godot 4.1
- Godot 4.1 เป็นอัปเดตที่ผ่านการพัฒนามา 4 เดือน หลังจาก Godot 4.0 และยังคงเดินตามแนวทางการปรับปรุง 4.0 ด้วยรีลีสย่อยที่ออกบ่อย
- จุดสำคัญของรีลีสนี้คือ ความเสถียร ประสิทธิภาพ และคุณภาพการเก็บงาน พร้อมกับการเพิ่มฟีเจอร์ใหม่
- การหลบหลีกในการนำทาง AI ที่ดีขึ้น
- ความสามารถในการแยกตัวแก้ไขโค้ดไปวางบนหน้าจออื่น
- มีการแก้ไข ปัญหากว่า 900 รายการ ที่ผู้ใช้รายงานระหว่างใช้งาน Godot 4 หรือพบจากการทดสอบพรีรีลีสของ 4.1
- เกมและแอปส่วนใหญ่ที่สร้างด้วย 4.0 สามารถย้ายไป 4.1 ได้ค่อนข้างปลอดภัย
- ผู้ใช้ C# และ GDExtension ควรคาดว่าจะมีความไม่เข้ากันบางส่วน
- ก่อนย้ายควรสำรองข้อมูล และแนะนำให้ commit สถานะโปรเจ็กต์ผ่านระบบควบคุมเวอร์ชันอย่าง Git
- กำลังจัดเตรียมคู่มือการย้ายระบบ
- สามารถดาวน์โหลด Godot 4.1 ได้จากหน้าดาวน์โหลด
การมีส่วนร่วมของชุมชนและเงินทุนพัฒนา
- Godot เป็นโปรเจ็กต์ที่ขับเคลื่อนโดยชุมชน โดยมีผู้มีส่วนร่วมอิสระช่วยกันพัฒนาเอนจิน
- ในช่วงไม่กี่ปีที่ผ่านมา ด้วยเงินบริจาคจากผู้ใช้และบริษัทต่าง ๆ ทำให้สามารถจ้างผู้มีส่วนร่วมหลักบางคนแบบประจำได้ และทำให้รีลีสออกได้รวดเร็วขึ้น
- ปัจจุบันค่าใช้จ่ายรายเดือนสูงกว่าเงินบริจาครายเดือน ทำให้เงินทุนพัฒนายังคงพึ่งพาเงินบริจาคก้อนใหญ่แบบครั้งเดียวจากบริษัทอยู่มาก
- หากต้องการรักษาความเร็วของการอัปเดต Godot 4 และจ้างผู้ดูแลเพิ่มเติมเพื่อพิจารณาการมีส่วนร่วมให้มากขึ้น ก็ยังต้องการ เงินบริจาครายเดือน เพิ่มเติม
- นอกจากการสนับสนุนทางการเงินแล้ว ยังมีอีกหลายวิธีในการช่วยโปรเจ็กต์
- เขียนรายงานบั๊กอย่างละเอียด
- มีส่วนร่วมกับ codebase
- เขียนเอกสาร
- เขียนไกด์ในเอกสารทางการหรือเว็บไซต์ส่วนตัว
- ตอบคำถามและแบ่งปันเคล็ดลับบนแพลตฟอร์มชุมชน
- รีลีสนี้เกิดขึ้นได้จากการส่งผลงานของ ผู้มีส่วนร่วมมากกว่า 300 คน และสามารถดูรายการแก้บั๊กและการปรับปรุงทั้งหมดได้ใน interactive changelog
การปรับปรุงประสิทธิภาพ
- เกม Godot สร้างขึ้นจาก node tree ซึ่งเป็นองค์ประกอบพื้นฐานของเอนทิตีในเกม และการเพิ่มหรือลบโหนดเป็นงานที่เกิดขึ้นบ่อยมากในเอนจิน
- ใน 4.1 ได้เปลี่ยนอัลกอริทึมการเพิ่ม·ลบโหนดย่อยไปใช้โครงสร้าง hash map ที่เร็วกว่า ทำให้งานดังกล่าว เร็วขึ้นหลายเท่า
- งานเกี่ยวกับโหนดบางอย่างที่พบไม่บ่อยจะช้าลงเล็กน้อย
- การใช้หน่วยความจำของคลาส Node พื้นฐาน เพิ่มขึ้น 10%
- ให้ประโยชน์อย่างมากโดยเฉพาะในโปรเจ็กต์ซับซ้อนที่มีการจัดการโหนดจำนวนมาก
- มีการเพิ่ม multithreading แบบทดลอง สำหรับ scene
- สามารถควบคุมวิธีประมวลผลโหนดแบบลำดับหรือแบบขนานได้ผ่านพร็อพเพอร์ตีใหม่ของโหนด
- ฟีเจอร์นี้ยังเป็นแบบทดลอง จึงต้องการการทดสอบวงกว้างเพื่อค้นหา edge case
- ไม่แนะนำให้ใช้ในโปรดักชัน
- ยังมีการแก้ปัญหาและข้อจำกัดจำนวนมากในระบบโหลดแบบ multithreaded
- มีการเพิ่ม pipeline cache ให้กับตัวเรนเดอร์ Vulkan
- shader cache เดิมช่วยลดอาการสะดุดจากการคอมไพล์ shader ได้ แต่การคอมไพล์ pipeline ก็ยังทำให้สะดุดและโหลดช้าได้อยู่
- แม้ยังไม่สามารถแก้ปัญหาอาการสะดุดจากการคอมไพล์ pipeline ได้ทั้งหมด แต่ก็อาจช่วยลดเวลาโหลดได้เล็กน้อยใน rendering backend ที่อิงกับ RenderingDevice
- cache นี้สามารถปิดได้จากการตั้งค่าโปรเจ็กต์ และใน Godot 4.1 จะเปิดใช้งานเป็นค่าเริ่มต้น
- ยังไม่สามารถแก้ทุกสาเหตุของการค้างได้ จึงจะมีการพัฒนาต่อในรีลีสถัดไป
การเปลี่ยนแปลงในเอนจินหลัก
- เวลานำเข้าโมเดลใน Godot มักพบปัญหาที่โมเดลหันหลังผิดทิศอยู่บ่อยครั้ง
- ใน 4.1 มีการเปลี่ยนแปลงหลายอย่างเพื่อลดปัญหานี้
- สลับทิศทางกล้องหน้า·หลังในเอดิเตอร์
- เพิ่มอาร์กิวเมนต์ให้ฟังก์ชัน
look_at()เพื่อใช้ model space เป็นเกณฑ์ด้านหน้าแทนแกน-Zของกล้อง - การเปลี่ยนแปลงนี้ยังช่วยแก้บั๊กเก่าเกี่ยวกับการติดตามเส้นทางด้วย
- มีการเพิ่ม frame delta smoothing ให้กับ Godot 4
- สามารถปรับปรุงความลื่นไหลของการเคลื่อนไหวได้อย่างมาก และทำให้เกมเพลย์นุ่มนวลขึ้น
- เปิดใช้งานเป็นค่าเริ่มต้น
- ทำงานเมื่อเปิด VSync เท่านั้น
การปรับปรุงด้านสคริปต์
-
GDScript
- เดิมทีหากต้องการแชร์ข้อมูลระหว่างหลายอินสแตนซ์ของสคริปต์เดียวกัน จำเป็นต้องใช้ resource หรือ autoload
- ตั้งแต่ Godot 4.1 เป็นต้นไป สามารถสร้างและใช้ ตัวแปรแบบ static ได้
- ตัวแปร static จะเก็บข้อมูลไว้ที่คลาส ไม่ใช่ในแต่ละอินสแตนซ์ และทุกอินสแตนซ์ของคลาสเดียวกันจะแชร์ค่านี้ร่วมกัน
- ใช้โดยใส่คีย์เวิร์ด
staticหน้าการประกาศตัวแปรที่ด้านบนสุดของสคริปต์ - ยังมีการปรับปรุงฟีเจอร์สร้างเอกสารอัตโนมัติสำหรับ named class ที่เพิ่มเข้ามาใน Godot 4 ด้วย
- enum ถูกปฏิบัติให้เป็นชนิดข้อมูล ทำให้เอกสารที่สร้างขึ้นแม่นยำขึ้น
- นอกจาก docstring ที่เคยใช้ได้เฉพาะเหนือการประกาศตัวแปรหรือฟังก์ชัน ตอนนี้ยังใช้ inline docstring ได้ด้วย
-
C#/.NET
- จุดเน้นของ C# ในรีลีสนี้คือการเพิ่ม ความเท่าเทียมด้านฟีเจอร์ กับ GDScript
- ใน GDScript สามารถเพิ่มชื่อคลาสแบบ global ให้สคริปต์เพื่อกำหนด node type ใหม่ที่ใช้ในเอดิเตอร์ได้
- ตั้งแต่ Godot 4.1 เป็นต้นไป ใน C# ก็สามารถทำเช่นเดียวกันได้ด้วยการเพิ่มแอตทริบิวต์
[GlobalClass]ให้กับไฟล์ - ยังสามารถกำหนดไอคอนเฉพาะให้กับ global class ได้ด้วยแอตทริบิวต์
[Icon] - อย่างไรก็ตาม ณ เวอร์ชัน 4.1 โปรเจ็กต์ที่สร้างด้วย C# ยัง ไม่สามารถ export ไปยังแพลตฟอร์มมือถือและเว็บได้
- งานสนับสนุนยังอยู่ระหว่างดำเนินการ
- การแก้ข้อจำกัดนี้อาจขึ้นอยู่กับการออกรีลีส .NET 8 ช่วงปลายปี 2023
- งานรองรับแพลตฟอร์มมือถือและเว็บอาจเริ่มอย่างจริงจังได้ในช่วงครึ่งหลังของปี 2023 เท่านั้น
-
GDExtension
- Godot มีเทคโนโลยีที่ทำให้สามารถใช้ภาษาระดับล่างอย่าง C++ เป็นภาษาสคริปต์สำหรับเกมได้โดยไม่ต้องคอมไพล์เอนจินใหม่
- GDExtension ยังคงอยู่ในสถานะ เบตา สำหรับรีลีสนี้
- ใน 4.1 ความสามารถด้านสคริปต์ของ GDExtension เข้าใกล้ GDScript และ C# มากขึ้น
- สามารถสร้าง visual shader node แบบใหม่ได้
- สามารถสร้าง editor plugin ด้วย GDExtension ได้
- มีการเพิ่ม ระบบ backward compatibility เพื่อช่วยให้โค้ดสำหรับ Godot 4.1 ยังทำงานต่อได้เมื่อมีการเปลี่ยน API ในอนาคต
- อย่างไรก็ตาม เพื่อแก้ปัญหาหลักของ GDExtension จำเป็นต้องมีการเปลี่ยนแปลงที่ไม่เข้ากันครั้งใหญ่ใน 4.1
- ส่วนขยายเดิมของ Godot 4.0 ต้องพอร์ตและคอมไพล์ใหม่สำหรับ 4.1
- ยังมีการทำงานด้านสถาปัตยกรรมจำนวนมากอีกครั้ง เพื่อให้ GDExtension API ขยายต่อได้ในอนาคต
เวิร์กโฟลว์ในเอดิเตอร์
- Godot 4 รองรับหลายหน้าต่างอยู่แล้วสำหรับการตั้งค่าโปรเจ็กต์ การตั้งค่าเอดิเตอร์ และป็อปอัปต่าง ๆ
- ตั้งแต่ 4.1 เป็นต้นไป สามารถแยกเอกสารออกเป็น หน้าต่างลอย ได้ และยังสามารถแยกตัวแก้ไขสคริปต์รวมถึง shader editor ไปไว้บนจออีกใบได้
- เอดิเตอร์สามารถติดตามเลย์เอาต์หน้าต่าง และเมื่อปิดแล้วเปิดใหม่ก็ยังคงตำแหน่งการทำงานเดิมไว้ได้
- Godot 4.0 รองรับการกำหนด·export typed array และ export โหนดแต่ละตัวใน inspector แต่ยังไม่สามารถรวมสองอย่างนี้เข้าด้วยกันได้
- ตั้งแต่ Godot 4.1 เป็นต้นไป สามารถ export array ของโหนด ไปยัง inspector ได้ ทำให้เชื่อมโยง game object เข้าหากันได้ง่ายขึ้น
- มีการเพิ่มฟีเจอร์กำหนดแท็กให้แต่ละโปรเจ็กต์ใน project manager และกรองตามแท็กได้
- ช่วยให้ค้นหาโปรเจ็กต์ Godot จำนวนหลายสิบหรือหลายร้อยรายการได้ง่ายขึ้น
การเปลี่ยนแปลงด้านการเรนเดอร์
- มีการปรับปรุง turbulence ของ particle ใหม่จากฟีดแบ็กของศิลปิน ทำให้ ควบคุมงานสร้างสรรค์ได้มากขึ้น
- turbulence ถูกใช้บ่อยในการสร้างเอฟเฟ็กต์ที่ดูหนาแน่นและกระจายกว้างแบบที่พบในเกมสมัยใหม่
- มี 3D noise texture แบบใหม่ที่ช่วยควบคุมความหนาแน่นของ volumetric fog ได้ง่ายขึ้น
- สามารถทำให้หมอกบางลงในบางพื้นที่ได้
NoiseTexture3Dยังสามารถใช้สร้าง vector field สำหรับ particle attractor ได้ด้วย- มีประโยชน์ในการจำลองลมที่ส่งผลต่อ particle
- ตัวเรนเดอร์ของ Godot ยังมีการปรับปรุงที่วางแผนไว้อีกมาก และส่วนใหญ่จะเข้ารีลีสในอนาคต
- ทีมเรนเดอร์และผู้มีส่วนร่วมให้ความสำคัญกับ การแก้บั๊กและความเสถียร มากกว่าการเพิ่มฟีเจอร์ใหม่
- ตัวเรนเดอร์ 3D GLES3 ยังไม่เสร็จสมบูรณ์ และจะมีงานจำนวนมากดำเนินต่อไปในอีกไม่กี่เดือนข้างหน้า
การปรับปรุงด้านการนำทาง
- Godot 4.0 ได้นำระบบหลบหลีกแบบเรียลไทม์สำหรับ AI navigation มาใช้ แต่ยังจำกัดอยู่ที่ ระนาบเดียว
- Godot 4.1 มาพร้อมอัลกอริทึมหลบหลีกที่เขียนขึ้นใหม่ทั้งหมด
- ให้พฤติกรรมที่ดีขึ้นและควบคุมได้มากขึ้น
- ตอนนี้การหลบหลีกสามารถทำงานได้ทั้งใน 2D และ 3D
- ทำให้เอเจนต์ที่บินอยู่สามารถเคลื่อนที่เหนือเอเจนต์เดินพื้นดินได้
- สามารถใช้เลเยอร์เพื่อควบคุมว่าเอเจนต์ใดจะหลบเอเจนต์ใด
- สามารถกำหนดลำดับความสำคัญเพื่อให้บางเอเจนต์ผลักเอเจนต์อื่นออกไปได้
- ดูพฤติกรรมการนำทางที่ปรับปรุงแล้วได้ในเอกสารที่อัปเดต
การรองรับแพลตฟอร์มและข้อจำกัดของเว็บ
- ขอบเขตการรองรับแพลตฟอร์มของ Godot 4.1 เหมือนกับ Godot 4.0
- ทั้งเอนจินมาตรฐานและเวอร์ชัน .NET สามารถ export ไปยังทุกแพลตฟอร์มเดสก์ท็อปได้
- หากโปรเจ็กต์ไม่ได้ใช้ C# ก็สามารถ export ไปยังมือถือและเว็บได้
- ณ เวอร์ชัน 4.1 การ export เว็บยังมีข้อจำกัดเนื่องจากผู้พัฒนาเบราว์เซอร์บางรายยังไม่รองรับฟีเจอร์สมัยใหม่บางอย่าง
- อาจเกิดปัญหาในเบราว์เซอร์ที่รองรับ WebGL 2 ได้ไม่ดี เช่น Chrome บน macOS
- แก้ได้ยากหากไม่มีการแก้จาก Google หรือความพยายามอย่างมากเพื่อรองรับตัวเรนเดอร์ WebGL 1 / GLES2 โดยเฉพาะ
- บนแพลตฟอร์มโฮสติ้งที่ไม่สามารถตั้งค่า CORS header ที่จำเป็นต่อการรองรับ
SharedArrayBufferได้ การตั้งค่าเกมเว็บจะซับซ้อน- ปัญหานี้ขึ้นอยู่กับการรองรับ
coep:credentiallessheader ของ Safari เป็นหลัก - เบราว์เซอร์ที่อิง Chromium และ Firefox ใช้งานได้ดีอยู่แล้ว
- หากเผยแพร่บน itch.io จะทำงานได้ดีเป็นพิเศษ
- กำลังตรวจสอบแนวทางเลี่ยงที่เป็นไปได้
- ปัญหานี้ขึ้นอยู่กับการรองรับ
ปัญหาที่ทราบและรีลีสถัดไป
- Godot 4.1 ยังมีปัญหาบางอย่างที่แก้ไม่ทันก่อนรีลีส
- สามารถดูตัวติดตามบั๊กได้ที่ Godot GitHub issues
- หนึ่งในปัญหาสำคัญที่ยืนยันแล้วคือ API ใหม่สำหรับกำหนดคุณสมบัติการตั้งค่าแบบกำหนดเองของ export preset ไม่สามารถเก็บการตั้งค่าของผู้ใช้ไว้ได้
- เมื่อรีสตาร์ตเอดิเตอร์ ตัวเลือกการตั้งค่าจะถูกรีเซ็ตและหายไป
- จะมีการแก้ไขใน 4.1.1
- PR ที่เกี่ยวข้องคือ GH-79025
- งานของ Godot 4.2 เริ่มต้นขึ้นแล้ว และมีกำหนดออกในอีก 4 เดือน
- Godot ยังคงมุ่งรักษารอบรีลีสที่เสถียร เพื่อให้ผู้ใช้ไม่ต้องรอนานสำหรับการปรับปรุงและฟีเจอร์ใหม่ถัดไป
1 ความคิดเห็น
ความเห็นจาก Hacker News
ช่วงหลังย้ายจาก Unity มาเป็น Godot 4.0 เกือบทั้งหมดแล้ว แม้จะไม่ได้เป็นนักพัฒนาเกมมืออาชีพ แต่ในฐานะคนที่ทำเกมเล็ก ๆ แนวอินดี้/itch.io ก็พอใจมาก
มันเบา เร็ว เรียนรู้ง่าย และทำสิ่งที่นักพัฒนาเดี่ยว/อินดี้ต้องการได้ 90%
แต่ยังเลิกใช้ Unity ไปทั้งหมดไม่ได้ เพราะมีบั๊กที่ทำให้ตอนผู้ใช้ macOS เปิดเกมบน itch.io ใช้เวลาโหลดนานเกินไปจนคิดว่าเกมพังแล้วปิดแท็บไป
เกมที่ทำมักเป็นเกมการศึกษาหรือทำให้เด็ก ๆ ที่ใช้ iPad/MacBook ดังนั้นการส่งลิงก์ itch.io ให้จึงง่ายกว่าการสอนติดตั้งในเครื่องและโน้มน้าวเจ้าของอุปกรณ์มาก
ฝั่ง Godot บอกว่ากำลังแก้ปัญหาอยู่ แต่จนกว่าจะเรียบร้อยก็ยังต้องใช้ Unity ต่อกับบางโปรเจกต์อยู่ดี ถ้าปัญหานี้ถูกแก้ได้ Godot น่าจะดังมากในฝั่ง itch.io/เกมแจม
หลังจากนั้นก็ย้ายจาก Godot 4.0 C# ไปเป็น Godot 3.5.2 + GDScript และพอใจมาก
ยังตั้งค่า CI/CD pipeline ให้ build/deploy ไปยัง Github Pages อัตโนมัติทุกครั้งที่ commit เข้า master ด้วย ซึ่ง pipeline แบบนี้ก็ดีมาก
https://www.reddit.com/r/godot/comments/q25riu/hosting_on_gi...
Godot 4 มีการปรับปรุงด้านภาษาที่น่าคาดหวัง เช่น รองรับ type ได้ดีขึ้น และลดการใช้ magic string อย่างฟีเจอร์อ้างอิง signal ด้วยชื่อ
แต่ถ้านั่นเป็นอุปสรรคใหญ่ อาจรอไปก่อนจะดีกว่า
บางครั้งก็รู้สึกหงุดหงิดกับมุมมองของทีม Godot ที่มองปัญหาบน macOS ว่าเป็นบั๊กของ Chrome ไม่ใช่ regression ของ Godot[2]
มันใกล้เคียงกับเรื่องของนิยามและลำดับความสำคัญ แต่ถ้าฟีเจอร์ที่เคยพึ่งพาใน Godot 3 ใช้งานพังใน Godot 4 ก็ยากที่จะไม่มองว่าเป็น regression
ถึงอย่างนั้นก็ยังขอบคุณมากสำหรับงานทั้งหมดที่ใส่เข้ามาใน Godot 4 และเวอร์ชันก่อนหน้า และหวังว่าจะได้ใช้ Godot 4 ในสักวัน
[1] ถ้าอยากดูก็อยู่ที่ https://eieio.games/ ทั้งหมด
[2] https://github.com/godotengine/godot/issues/70691
จนถึงตอนนี้ยังไม่เคยเจอปัญหา WebGL2 บน Chrome/macOS เลย เลยอยากรู้ว่าหมายถึงปัญหาแบบไหนโดยเฉพาะ
แต่ผมเองก็หลีกเลี่ยงฟีเจอร์ WebGL2/GLES3 ที่รู้กันว่าอาจก่อปัญหาอยู่เหมือนกัน ส่วนใหญ่เป็นพวก uniform buffer หรือรูปแบบการอัปเดต buffer ที่บนเนทีฟทำงานดีแต่บน WebGL ไม่ดี เช่น “buffer orphaning”
Godot เป็นเครื่องมือที่น่าประทับใจมาก ถ้ามีเหตุให้เริ่มโปรเจกต์เกมใหม่ก็อยากศึกษาให้จริงจังมากขึ้น และเมื่อดูจากสิ่งที่ทำได้ด้วยทีมที่ค่อนข้างเล็กแล้ว ก็ทำให้ Unity ดูน่าอายเลย
ประทับใจเหมือนกันที่บอกว่า “แก้ปัญหามากกว่า 900 รายการที่ถูกรายงานระหว่างการใช้ Godot 4 และการทดสอบ pre-release ของ 4.1”
แค่แก้ปัญหาได้มากขนาดนั้นพร้อมกับยังปรับปรุงประสิทธิภาพและเสถียรภาพต่อไปได้ ก็สมควรได้รับคำชื่นชมแล้ว
แน่นอนว่าจำนวน issue ที่เปิดอยู่ไม่ใช่ตัวชี้วัดคุณภาพซอฟต์แวร์ที่ดีนัก
ผมชอบ Godot แต่ก็มีบางจุดที่น่าเสียดายอยู่บ้าง GDScript ไม่ใช่ Python และขาดฟีเจอร์เล็ก ๆ ที่ทำให้ Python ใช้งานได้ดี เช่น list/dictionary comprehension,
.items(), เซ็ต เป็นต้นถึงอย่างนั้นสำหรับการพัฒนาเกมก็ถือว่าเพียงพอ และเป็นภาษาที่ค่อนข้างดีเพราะเข้ากับสภาพแวดล้อมได้ดี รวมถึง native type ต่าง ๆ
ผมเคยใช้ GDNative และคงต้องลอง GDExtension เพิ่มอีก แต่จนถึงตอนนี้การเขียน C++ สำหรับ Godot ยังให้ความรู้สึกค่อนข้างหยาบ โปรแกรมเมอร์ต้องใช้ Godot type และ
new()กระจายไปทั่ว ทำให้จัดการได้ไม่ง่ายนักเพราะงั้น Godot จึงใกล้เคียงกับการเป็นเอนจินที่ใช้ภาษาสคริปต์เป็นหลักมากกว่าจะเป็นเอนจิน C++ แท้ ๆ กล่าวคือใช้ภาษาสคริปต์เกือบตลอดเวลา แล้วค่อยไป optimize ด้วย C++ เฉพาะตอนที่สคริปต์เร็วไม่พอ
ผมเองก็อยากรู้เพิ่มว่าในทางปฏิบัติแล้ว GDScript เร็วแค่ไหนเมื่อเทียบกับภาษาอื่น และก็ไม่แน่ใจว่า Mono/.NET จะเร็วกว่าไหม จุดที่ดีคือมันเป็นภาษาที่ผสานกับการออกแบบของสภาพแวดล้อมได้อย่างสมบูรณ์แบบ แต่ก็สงสัยว่ามีแผนจะปรับปรุงไหม
ผมวางแผนจะทำ multiplayer FPS แต่ดูเหมือนว่า Godot จะไม่มี network prediction และอยากให้มี
ข้างหน้าก็กังวลเรื่องการรองรับ OpenGL ด้วย มันยังไม่จบจริง ๆ และกลัวว่ามันจะแตกต่างจาก API รุ่นใหม่อย่าง Vulkan หรือ DX12 มากเกินไปจนทำออกมาได้ไม่ดี
โดยรวมแล้ว Godot คือหนึ่งในสิ่งที่ดีที่สุดที่เกิดขึ้นกับโอเพนซอร์สและการพัฒนาเกม การพัฒนาเกมเป็นสายงานที่โอเพนซอร์สปักหลักได้ยาก และการออกแบบที่เบาของ Godot ก็ให้ความรู้สึกโล่งใจอย่างมากเมื่อเทียบกับเครื่องมือขนาดยักษ์อย่าง Unreal หรือ Unity
แน่นอนว่าผมคงไม่เลือก Python โดยตรง ถึงจะเป็นภาษาที่ชอบ แต่ก็น่าจะเลือกภาษาที่โฟกัสเรื่องประสิทธิภาพมากกว่า Go ก็อาจเป็นตัวเลือกที่ดี
ตัว GDScript เองไม่ได้แย่ และถ้าไม่เอาไปเทียบกับภาษาอื่นก็ถือว่ายอดเยี่ยมทีเดียว แต่ถ้าเทียบกับภาษาทั่วไปสำหรับงานสารพัดแล้ว สิ่งที่ต้องเสียไปมีมากเกินไป
ผมรู้ว่ามี binding อยู่ แต่จากประสบการณ์คล้ายกันกับ Raylib การรองรับภาษาแบบไม่เป็นทางการแทบจะเท่ากับไม่มีเลย แม้แต่ Mono ที่เป็น binding อย่างเป็นทางการก็ยังค่อนข้างแย่
แต่ถึงอย่างนั้น แม้แต่เกม AAA ก็ยังมักใช้ภาษาสคริปต์ที่ช้าในส่วน game logic อยู่บ่อย ๆ เพราะในหลายเกม game logic ไม่ใช่ส่วนที่กิน CPU มากนัก จึงมักไม่ใช่เรื่องสำคัญ
มีกรณีใช้งาน Godot สำหรับ การพัฒนาแอปข้ามแพลตฟอร์ม แทนอะไรอย่าง Electron ไหม?
โปรแกรมแก้ไขพิกเซลอาร์ต: https://github.com/Orama-Interactive/Pixelorama
เครื่องมือวาดแบบ infinite canvas: https://github.com/mbrlabs/Lorien
บอร์ดคัมบังสไตล์ Trello: https://github.com/alfredbaudisch/Godello
เครื่องมือออกแบบเนื้อเรื่องสำหรับเกม: https://github.com/mhgolkar/Arrow
ผมเคยใช้ตอนที่ Substance ถูก Adobe ซื้อกิจการ แล้วน่าแปลกที่มันใช้งานได้ง่ายกว่าและสนุกกว่ามาก ส่วน Substance Designer ให้ความรู้สึกอืดพอสมควร
แน่นอนว่า Substance Designer ก็มีข้อดีเฉพาะตัวคือการทำงานร่วมกับ Substance Painter ส่วน Material Maker ก็มีฟังก์ชันวาดแบบ manual อยู่บ้าง แต่ไม่ใช่แอปวาดภาพเต็มรูปแบบ
OpenSCAD Graph Editor ถูกสร้างด้วย Godot เวอร์ชันเก่า และรันได้บน Mac OS, Windows, Linux:
https://github.com/derkork/openscad-graph-editor
หนึ่งในผู้มีส่วนร่วม/นักพัฒนาหลักของ Godot ยังได้เผยแพร่เครื่องมือเล็ก ๆ ที่สะดวกมากสำหรับถอดกลับสิ่งที่สร้างด้วย Godot ได้แบบสมบูรณ์
https://github.com/bruvzg/gdsdecomp
Godot ยอดเยี่ยมมาก ประทับใจอย่างลึกซึ้งกับความคืบหน้าของทีมและทิศทางโดยรวมของโปรเจกต์
เดิมทีผมสนใจการพัฒนาเกมมาตลอด และเหตุผลใหญ่ที่ไปเรียนวิทยาการคอมพิวเตอร์จนมาเป็นวิศวกรซอฟต์แวร์ก็เพราะอยากสร้างเกม
เคยอยากทำเกมเล็ก ๆ ด้วยตัวเอง แต่ในทางปฏิบัติกลับทำได้ไม่ค่อยดี
หลังจากกลายเป็นวิศวกรซอฟต์แวร์แบบเต็มเวลาแล้ว ก็ไม่มีทั้งเวลาหรือเครื่องมือที่เหมาะสมสำหรับทำเกมเล็ก ๆ เป็นงานอดิเรก
ช่วงหลังได้เจอ Bevy แล้วลองใช้ดู แม้ ECS จะเป็นแนวคิดที่ดี แต่ Bevy ใกล้เคียงกับการเป็นไลบรารีมากกว่า และค่อนข้างยากที่จะสร้างเกมที่สมบูรณ์ได้เหมือนตอนใช้ SDL หรืออะไรทำนองนั้น
พอได้เจอและลองใช้ Godot ก็รู้สึกประทับใจมาก ใช้ง่ายสำหรับมือใหม่ แต่ก็เร็วพอ และชุมชนก็ดีเยี่ยม นี่แหละคือสิ่งที่ผมตามหาอยู่พอดี เลยดีใจมากที่มันมีอยู่ และตั้งตารอการพัฒนาต่อไป
สิ่งเดียวที่เสียดายนิดหน่อยคือการเลือกภาษาแบบเนทีฟและเป็น “ทางการ” GDScript ก็โอเค เป็นภาษาสไตล์ Python ที่ค่อนข้างดีสำหรับมือใหม่และการทำต้นแบบอย่างรวดเร็ว ส่วน C# ก็น่าจะเหมาะกับคนที่ย้ายมาจาก Unity
โดยส่วนตัวคงจะชอบมากกว่านี้ถ้ามีการรองรับ C++ ที่ดีกว่านี้ หรือมีอย่างอื่นเพิ่มเติม และก็รู้ว่ามีอินเทอร์เฟซ GDNative อยู่แล้ว และมันก็ดีขึ้นใน 4.0
C# เป็นภาษาที่ดี แต่รู้สึกว่าที่มันมีบทบาทมากในวงการพัฒนาเกมก็เพราะ Unity มากกว่า มันค่อนข้างเยิ่นเย้อ และนอกเหนือจาก Visual Studio แบบเต็ม ๆ แล้ว การรองรับเครื่องมือก็ไม่ได้ดีขนาดนั้น
แต่อีกมุมหนึ่งก็อาจเป็นไปได้ว่าส่วนของ “การเขียนโปรแกรมจริง ๆ” ในการพัฒนาเกมไม่ได้สำคัญขนาดนั้น และผมอาจต้องยอมรับแล้วใช้ GDScript ก็ได้
ยังมี Rust binding ที่ใช้ GDExtension ด้วย: https://github.com/godot-rust/gdext
น่าลองดู
Godot อาจสู้ Unreal ได้ยาก แต่ผมเชียร์เต็มที่ในฐานะตัว แทนที่ Unity
มันเป็นเอนจินที่ยอดเยี่ยม และมีนักพัฒนามากขึ้นเรื่อย ๆ ที่เริ่มมองเห็นศักยภาพของมันอย่างแท้จริง
แต่ถ้าพูดถึงการพัฒนาเกมอินดี้ ผมเห็นด้วยเต็มที่ Godot คือเฟรมเวิร์กแบบที่ผู้คนเคยคาดหวังจาก Unity: เบา ไม่ขัดจังหวะ และช่วยให้เริ่มสร้างได้ทันที สำหรับการใช้งานแบบนั้น Godot ดีกว่ามาก
โชคดีที่ Unreal Engine ไม่ได้เป็นตัวเลือกที่ดีสำหรับเกมหลายประเภท และ Godot ก็กำลังสร้างพื้นที่ของตัวเองได้ดีในเกม 2D และเกม 3D ที่ไม่ซับซ้อนมาก
ตลาดเกม 2D ยังใหญ่อยู่มาก และน่าแปลกที่เอนจินที่รองรับ 2D ได้ดีจริง ๆ มีไม่เยอะ Godot ติดกลุ่มบนสุดได้สบาย
Godot เจ๋งมากจริง ๆ และผมนับถือคนทุกคนที่ทุ่มเวลาเพื่อสร้างซอฟต์แวร์แบบนี้รวมถึงเครื่องมืออย่าง Blender ให้ออกมายอดเยี่ยม
Godot ดีขึ้นอย่างเห็นได้ชัดทุกครั้งที่มีรีลีสใหม่ มีฟีเจอร์บางอย่างที่อยากให้เพิ่มเข้ามาในอนาคต
ได้แก่ FSR2, การรองรับ Wayland ที่ยอดเยี่ยม, และการผสาน LLM เข้าด้วยกัน LLM อาจช่วยทำให้ NPC ดูสมจริงขึ้นได้
ถ้ามองในแง่ของการผสาน AI สิ่งที่น่าสนใจกว่าคือการออกแบบที่มี AI ช่วย เช่น อธิบายภูมิประเทศ ตัวละคร หรือสถานการณ์ แล้วให้ AI สร้างอะไรบางอย่างขึ้นมา จากนั้นผู้ใช้ค่อยปรับแต่งและจูนต่อ
แต่ถึงอย่างนั้น ก็มีแนวโน้มว่าสิ่งนี้จะเหมาะกับการทำงานนอกแกนหลักของเกมเอนจินมากกว่า
มี บทสอน Godot ที่อยากแนะนำไหม?
ผมมีต้นแบบ RPG เล็ก ๆ ที่รันบนคอนโซลอยู่ แล้วอยากลองใส่ GUI จริงหรือกราฟิกแบบสไปรต์เข้าไป
ขอบอกไว้ก่อนว่าผมเป็นผู้ก่อตั้งบริษัทที่ทำคอร์สนี้ แต่ตัวบทสอนฟรี และ custom asset ที่ใช้ในบทสอนก็ให้ภายใต้ไลเซนส์ที่ค่อนข้างใจกว้าง
แต่ในฐานะคนที่ย้ายจาก Unity มา Godot ผมมองว่าระบบนิเวศของบทสอน Godot ยังตามหลังอยู่มาก
ช่วงหลังเขาก็ออกคอร์สสำหรับ Godot 4 โดยเฉพาะด้วย
https://www.youtube.com/watch?v=M8-JVjtJlIQ
https://www.youtube.com/playlist?list=PLwYfcDZR0fFcROLjkiyBW...
บทสอนจำนวนมากที่คุณเจอจะเป็นของ Godot 3 ดังนั้นควรกรองค้นหาโดยระบุ Godot 4 ไปเลย
ไม่อย่างนั้นคุณจะต้องปรับโค้ดในบทสอนให้ทำงานกับเวอร์ชัน Godot ของตัวเอง ซึ่งก็อาจเป็นประสบการณ์การเรียนรู้ที่ดีในตัวมันเอง
[0] https://docs.godotengine.org/en/stable/getting_started/intro...