- ทีมพัฒนา Architect of Ruin เริ่มต้นพัฒนาด้วย Bevy engine และ Rust ในช่วงแรก แต่ได้ เปลี่ยนไปใช้ Unity และ C# เนื่องจากปัญหาเชิงปฏิบัติ
- แม้จะมี ข้อดีของ Rust และ Bevy แต่ก็พบปัญหาเรื่อง การทำงานร่วมกัน, ความจำเป็นของ abstraction ระดับสูง, การเปลี่ยนแปลง API บ่อยครั้ง, ประสิทธิภาพการเรียนรู้ด้วย AI ที่ลดลง, และ ข้อจำกัดด้าน modding
- ทีมได้ทดลองย้าย 3 ฟีเจอร์หลักไปยัง Unity และ พิสูจน์ความเป็นไปได้สำเร็จภายใน 3 วัน ก่อนจะ พอร์ตทั้งโปรเจ็กต์เสร็จใน 6 สัปดาห์
- หลังจากเปลี่ยนแล้ว ปริมาณโค้ดลดลง, ความเร็วในการพัฒนาเพิ่มขึ้น และยังสามารถใช้ เครื่องมือใน ecosystem ได้ ทำให้ความพึงพอใจในการพัฒนาเพิ่มขึ้นอย่างมาก
- ทีมยังคงชื่นชอบ Rust และ Bevy มาก แต่เน้นย้ำว่านี่คือ การเลือกอย่างสมจริงเพื่อให้ตรงกับความต้องการของโปรเจ็กต์
การพัฒนาในช่วงแรกด้วย Bevy และ Rust
- ทีมสนุกกับโมเดล ECS ของ Bevy และ การตรวจสอบตอนคอมไพล์ อันเป็นเอกลักษณ์ของ Rust ซึ่งช่วยให้รีแฟกเตอร์ได้รวดเร็วและมีเสถียรภาพ
- ทีมลงมือสร้าง tilemap, skeletal animation, และ custom rendering pipeline ด้วย Bevy ด้วยตนเอง
- ทีมได้รับแรงบันดาลใจอย่างมากจากความมุ่งมั่นและวัฒนธรรมการถกเถียงที่คึกคักของ ชุมชน Bevy
Emergent Problems: ปัญหาที่รุนแรงกว่าที่คาดไว้
- ปัญหาด้านการทำงานร่วมกัน: สำหรับสมาชิกทีมที่เป็น มือใหม่ Rust ความซับซ้อนของ Rust กลายเป็น อุปสรรคในการเรียนรู้ และทำให้ความเร็วในการมีส่วนร่วมลดลง
- การขาด abstraction ระดับสูง
- เกิด ความยากในการเปลี่ยนไอเดียเกมเพลย์ให้เป็นโค้ดอย่างรวดเร็ว
- ขาดความยืดหยุ่นที่จำเป็นสำหรับ การทำ prototype อย่างรวดเร็ว
- การเปลี่ยนแปลง API บ่อยครั้ง: ทีมเหนื่อยล้ากับ ความไม่เสถียรของ API จากการพัฒนาอย่างรวดเร็วของ Bevy และ บั๊ก regression ที่เกิดขึ้นทุกครั้งที่อัปเดต
- การรองรับการเรียนรู้ด้วย AI ที่ไม่เพียงพอ: C# และ Unity รองรับการเรียนรู้แบบมี AI ช่วยได้ดีกว่า แต่ Rust และ Bevy มีข้อมูลน้อยกว่า จนทำให้ประสิทธิภาพการทำงานลดลง
- ข้อจำกัดด้าน modding: ทีมมองว่าในสภาพแวดล้อม Rust/Bevy การทำ scripting ที่เสถียรและการรับประกัน ความเข้ากันได้ของ ABI เป็นเรื่องยาก
การตัดสินใจเปลี่ยน: การทดลองกับ Unity
- ทีมเปรียบเทียบและวิเคราะห์ Unreal, Unity, Godot, การคงอยู่กับ Bevy และการสร้างเอนจินเอง
- Unity ได้คะแนนสูงสุด ในด้านความง่ายต่อการเรียนรู้, ประสิทธิภาพการทำงาน, ความสะดวกในการทำงานร่วมกัน และความเป็นไปได้ของ modding
การทดลอง 10%
- ทีมทดสอบ 3 งานหลักภายใน 3 สัปดาห์ ได้แก่ tilemap, ตัวละคร (Spine), และการสร้าง UI
- ผลลัพธ์คือ ทำทั้ง 3 งานเสร็จภายใน 3 วัน และตัดสินใจเปลี่ยนทันที
กระบวนการพอร์ตและผลลัพธ์
- ทีมใช้เวลา 6 สัปดาห์ในการสร้างทุกระบบและคอนเทนต์ใหม่ใน Unity
- พบว่า ปริมาณโค้ดลดลง, boilerplate หายไป, และ ความเร็วในการพัฒนาเพิ่มขึ้น
- การรองรับการเรียนรู้ด้วย AI ดีขึ้น และสามารถใช้เครื่องมือใน ecosystem ของ Unity (เช่น AStar Pathfinding) ได้อย่างเต็มที่
ชีวิตหลังการเปลี่ยนผ่าน
- ขณะนี้ Architect of Ruin กำลังพัฒนาบน Unity และยังคงรักษา การนำไอเดียไปใช้ได้อย่างรวดเร็วและมีผลิตภาพสูง
- ทีมยังคงเคารพ Rust และ Bevy อย่างลึกซึ้ง แต่ย้ำว่าจำเป็นต้องเลือกสิ่งที่ เหมาะกับโปรเจ็กต์
- ในอนาคตมีแผนจะแชร์รายละเอียดการพัฒนาด้วย Unity และประสบการณ์จากการพอร์ตเพิ่มเติม
บทสรุป
- ทีมยอมรับว่า ตอนเริ่มต้นไม่ได้ประเมินตัวเลือกต่าง ๆ อย่างเป็นธรรมพอ
- แม้จะเสียเวลาลงแรงเพื่อเปลี่ยนทิศทาง แต่สุดท้ายกลับช่วยประหยัดเวลาได้มากกว่า
- ทีมได้ตระหนักว่าการตัดสินใจอย่างสมจริง เหนือกว่าสัญชาตญาณ เป็นสิ่งสำคัญต่อการทำให้วิสัยทัศน์การพัฒนาเป็นจริง
3 ความคิดเห็น
น่าจะมีเอนจิน GUI ที่ใช้ Rust เป็นภาษา scripting อยู่บ้าง แต่ไม่แน่ใจว่ามีตัวไหนที่ถูกใช้ในระดับ production จริง ๆ หรือเปล่า เห็นมีกรณีที่ทำเกมด้วย Rust แล้วไม่สำเร็จ? โผล่มาเป็นระยะ ๆ ซึ่งก็พอเข้าใจได้ แต่เอ่อ... รู้สึกว่าไม่ค่อยได้ยินเรื่องเคสที่ประสบความสำเร็จเท่าไหร่ เลยทำให้รู้สึกแปลก ๆ เหมือนกัน ทั้งที่ก็น่าจะมีคนที่ใช้งานมันได้ดีอยู่ที่ไหนสักแห่ง
หรือกลับกัน ถ้าใช้ได้ดีจริง คนอื่นก็คงใช้กันได้ประมาณนี้อยู่แล้ว เลยไม่เอามาโพสต์กันหรือเปล่า?
ความเห็นจาก Hacker News
มีอีกกรณีหนึ่งที่โปรเจ็กต์เกมด้วย Rust ล้มเหลว ซึ่งเป็นเรื่องน่าเสียดาย
ฟังดูเป็นบทเรียนที่ดีว่าทำไมเอนจินเกมเชิงพาณิชย์ถึงครองการพัฒนาเกม
ชอบ Rust ในฐานะตัวแทนของ C++ แต่คิดว่า C++ ก็ไม่เหมาะกับโปรเจ็กต์ส่วนใหญ่อยู่ดี
การพัฒนาเกมด้วย Rust เหมือนการบุกเบิกดินแดนใหม่ และต้องลงแรงอีกมาก
ชอบ Rust แต่การทำซ้ำอย่างรวดเร็วทำได้ยาก
ในโปรเจ็กต์หนึ่งเปลี่ยนจาก Rust ไปเป็น Go และความเร็วในการทำซ้ำก็ดีขึ้น
ความผันผวนสูงของ ecosystem Rust เป็นข้อเสียที่คาดไม่ถึง
นักพัฒนาคนหนึ่งสร้างเกมเอนจินด้วย C และพัฒนาเกมด้วย Lua
การทำงานด้วย Rust แทบจะยากกว่าเสมอ
เป้าหมายของโปรเจ็กต์คือทำให้น้องชายที่ไม่เขียนโค้ดสามารถมีส่วนร่วมได้