5 คะแนน โดย GN⁺ 2025-04-29 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ทีมพัฒนา 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 ความคิดเห็น

 
aer0700 2025-04-30

น่าจะมีเอนจิน GUI ที่ใช้ Rust เป็นภาษา scripting อยู่บ้าง แต่ไม่แน่ใจว่ามีตัวไหนที่ถูกใช้ในระดับ production จริง ๆ หรือเปล่า เห็นมีกรณีที่ทำเกมด้วย Rust แล้วไม่สำเร็จ? โผล่มาเป็นระยะ ๆ ซึ่งก็พอเข้าใจได้ แต่เอ่อ... รู้สึกว่าไม่ค่อยได้ยินเรื่องเคสที่ประสบความสำเร็จเท่าไหร่ เลยทำให้รู้สึกแปลก ๆ เหมือนกัน ทั้งที่ก็น่าจะมีคนที่ใช้งานมันได้ดีอยู่ที่ไหนสักแห่ง

 
qwqwhs 2025-04-30

หรือกลับกัน ถ้าใช้ได้ดีจริง คนอื่นก็คงใช้กันได้ประมาณนี้อยู่แล้ว เลยไม่เอามาโพสต์กันหรือเปล่า?

 
GN⁺ 2025-04-29
ความเห็นจาก Hacker News
  • มีอีกกรณีหนึ่งที่โปรเจ็กต์เกมด้วย Rust ล้มเหลว ซึ่งเป็นเรื่องน่าเสียดาย

    • กำลังพัฒนาไคลเอนต์เมตาเวิร์สด้วย Rust มาเกือบ 5 ปีแล้ว แต่ใช้เวลานานเกินไป
    • คนอื่นทำโปรเจ็กต์คล้ายกันด้วย C#/Unity ได้ภายในไม่ถึง 2 ปี
    • ฐานผู้ใช้ของการพัฒนาเกม 3D ด้วย Rust มีขนาดเล็กมาก
    • ยังไม่มีกรณีของการพัฒนาเกมระดับ AAA ด้วย Rust และก็ไม่มีใครแก้ปัญหาด้านประสิทธิภาพได้
    • สแตกที่ใช้อยู่คือ Rend3/Egui/Winit/Wgpu/Vulkan ซึ่งมีบั๊กเยอะทุกตัว ยกเว้น Vulkan
    • มี crate จำนวนมากเกินไปที่พยายามจะครอบครอง event loop
    • crate มักถูกรีแฟกเตอร์ทุก ๆ ไม่กี่เดือนจน API พังบ่อย
    • การ dereference ใน Rust ทำได้ยาก
    • Rust จำเป็นต้องมีวิธีที่สม่ำเสมอสำหรับ single owner และการ dereference
    • trait ของ Rust ไม่ใช่อ็อบเจ็กต์ และไม่เหมาะกับการสร้างลำดับชั้นของอ็อบเจ็กต์
  • ฟังดูเป็นบทเรียนที่ดีว่าทำไมเอนจินเกมเชิงพาณิชย์ถึงครองการพัฒนาเกม

    • มีสิ่งที่ต้องทำมากมายเพื่อสร้างเกม แต่ส่วนใหญ่เป็นปัญหาที่ถูกแก้ไว้แล้ว
  • ชอบ Rust ในฐานะตัวแทนของ C++ แต่คิดว่า C++ ก็ไม่เหมาะกับโปรเจ็กต์ส่วนใหญ่อยู่ดี

    • ดูเหมือนหลายคนเลือก Rust เพราะคิดว่ามันมีประสิทธิภาพมากกว่า
  • การพัฒนาเกมด้วย Rust เหมือนการบุกเบิกดินแดนใหม่ และต้องลงแรงอีกมาก

    • Rust ยังไม่พร้อม
  • ชอบ Rust แต่การทำซ้ำอย่างรวดเร็วทำได้ยาก

    • เคยใช้ Bevy แต่ก็กลับไปใช้ Godot
  • ในโปรเจ็กต์หนึ่งเปลี่ยนจาก Rust ไปเป็น Go และความเร็วในการทำซ้ำก็ดีขึ้น

    • โค้ดเปราะบางขึ้น แต่คิดว่าเป็นทางเลือกที่ถูกต้องสำหรับลักษณะของโปรเจ็กต์นั้น
  • ความผันผวนสูงของ ecosystem Rust เป็นข้อเสียที่คาดไม่ถึง

    • crate มักถูกทอดทิ้งบ่อย และคิดว่านี่เป็นเพราะคนที่อยากใช้ Rust เป็นหลัก
  • นักพัฒนาคนหนึ่งสร้างเกมเอนจินด้วย C และพัฒนาเกมด้วย Lua

    • มีการแยกที่ชัดเจนระหว่างเกมเอนจินกับตัวเกม
    • เกมชื่อ 'Sapiens' เปิดตัวบน Steam ได้สำเร็จ
  • การทำงานด้วย Rust แทบจะยากกว่าเสมอ

    • นี่เป็นความเห็นจากประสบการณ์ส่วนตัว
  • เป้าหมายของโปรเจ็กต์คือทำให้น้องชายที่ไม่เขียนโค้ดสามารถมีส่วนร่วมได้

    • รู้สึกว่าต้องอัปเกรดไปเวอร์ชันล่าสุดอยู่ตลอด
    • สตูดิโอที่ใช้ Unity มักไม่อัปเกรดเวอร์ชันบ่อย เว้นแต่จะมีบั๊กบางอย่างที่ยังไม่ถูกแก้