- Nhóm phát triển Architect of Ruin ban đầu khởi động với engine Bevy và Rust, nhưng do các vấn đề thực tiễn nên đã chuyển sang Unity và C#
- Dù Rust và Bevy có nhiều ưu điểm, các vấn đề như cộng tác, nhu cầu về trừu tượng hóa cấp cao, API thay đổi thường xuyên, giảm hiệu quả học với AI, giới hạn modding đã trở thành trở ngại
- Nhóm đã thử nghiệm chuyển 3 tính năng cốt lõi sang Unity và xác minh thành công chỉ trong 3 ngày, rồi hoàn tất toàn bộ quá trình port trong 6 tuần
- Sau khi chuyển đổi, lượng mã giảm xuống, tốc độ phát triển được cải thiện, đồng thời có thể tận dụng các công cụ trong hệ sinh thái, giúp mức độ hài lòng khi phát triển tăng mạnh
- Dù vẫn dành nhiều tình cảm cho Rust và Bevy, nhóm nhấn mạnh đây là lựa chọn thực tế để đáp ứng các yêu cầu của dự án
Giai đoạn phát triển ban đầu với Bevy và Rust
- Nhóm rất thích mô hình ECS của Bevy và kiểm tra tại thời điểm biên dịch đặc trưng của Rust, nhờ đó trải nghiệm được khả năng refactor nhanh và tính ổn định cao
- Tự triển khai bằng Bevy các thành phần như tilemap, skeletal animation, custom rendering pipeline
- Nhận được nhiều cảm hứng từ sự nhiệt huyết và văn hóa thảo luận sôi nổi của cộng đồng Bevy
Emergent Problems: những vấn đề nghiêm trọng hơn dự đoán
- Vấn đề cộng tác: với các thành viên là người mới học Rust, sự phức tạp của Rust trở thành rào cản học tập, làm chậm tốc độ đóng góp
- Thiếu trừu tượng hóa cấp cao
- Gặp khó khăn trong việc chuyển nhanh ý tưởng gameplay thành mã nguồn
- Thiếu sự linh hoạt cần thiết cho prototyping nhanh
- API thay đổi thường xuyên: nhóm dần mệt mỏi với tính thiếu ổn định của API do Bevy phát triển quá nhanh và các lỗi hồi quy phát sinh sau mỗi lần cập nhật
- Thiếu hỗ trợ cho việc học với AI: C# và Unity có nền tảng học với AI tốt hơn, trong khi Rust và Bevy thiếu thông tin nên làm giảm năng suất
- Giới hạn modding: nhóm cho rằng trong môi trường Rust/Bevy, việc đảm bảo scripting ổn định và tính tương thích ABI là rất khó
Quyết định chuyển hướng: thử nghiệm với Unity
- So sánh và phân tích Unreal, Unity, Godot, tiếp tục dùng Bevy, và tự phát triển engine riêng
- Unity đạt điểm cao nhất về khả năng học, năng suất, mức độ dễ cộng tác và khả năng modding
Thử nghiệm 10%
- Kiểm thử trong vòng 3 tuần với 3 hạng mục cốt lõi: tilemap, nhân vật (Spine), xây dựng UI
- Kết quả là hoàn thành cả 3 bài toán chỉ trong 3 ngày, từ đó quyết định chuyển hướng
Quá trình port và kết quả
- Tái triển khai toàn bộ hệ thống và nội dung sang Unity trong 6 tuần
- Trải nghiệm giảm lượng mã, loại bỏ boilerplate, tăng tốc độ phát triển
- Cải thiện khả năng học với AI và có thể tích cực tận dụng các công cụ trong hệ sinh thái Unity như AStar Pathfinding
Cuộc sống sau đó
- Architect of Ruin hiện đang được phát triển trên nền tảng Unity, đồng thời duy trì khả năng phản ánh ý tưởng nhanh và năng suất cao
- Dù vẫn giữ sự tôn trọng sâu sắc với Rust và Bevy, nhóm nhấn mạnh rằng cần có lựa chọn phù hợp với dự án
- Trong tương lai, nhóm dự định chia sẻ thêm về chi tiết triển khai trên Unity và kinh nghiệm port
Kết luận
- Nhóm thừa nhận đã không đánh giá các lựa chọn một cách công bằng ngay từ đầu
- Dù đã đầu tư thời gian để đổi hướng, cuối cùng họ đánh giá rằng mình đã tiết kiệm được nhiều thời gian hơn
- Nhóm nhận ra rằng để hiện thực hóa tầm nhìn phát triển, đánh giá thực tế vượt lên trên bản năng là điều quan trọng
3 bình luận
Chắc là có đâu đó một engine GUI dùng Rust như ngôn ngữ script, nhưng tôi không rõ có cái nào được dùng ở mức production hay không. Thỉnh thoảng cũng có những bài kiểu như ca thất bại? khi làm game bằng Rust xuất hiện, mà ừm... việc có các ca thất bại được đăng lên thì cũng dễ hiểu thôi, nhưng cảm giác là lại không nghe nhiều về các ca thành công, nên cũng hơi lấn cấn. Chắc hẳn vẫn có những người đang dùng rất tốt ở đâu đó chứ.
Hay là ngược lại, vì nghĩ rằng nếu dùng tốt thì ai cũng viết được đến mức này nên họ không đăng lên chăng?
Ý kiến Hacker News
Lại có thêm một trường hợp thất bại khi thực hiện dự án game bằng Rust. Điều này thật đáng tiếc
Nghe như một bài học hay về lý do các game engine thương mại đã thống trị việc phát triển game
Tôi thích Rust như một sự thay thế cho C++, nhưng nghĩ rằng C++ không phù hợp với phần lớn dự án
Phát triển game bằng Rust giống như khai phá miền viễn biên, đòi hỏi rất nhiều công sức
Tôi thích Rust, nhưng rất khó lặp lại nhanh
Đã chuyển từ Rust sang Go trong dự án, và tốc độ lặp lại nhanh hơn
Mức độ biến động cao của hệ sinh thái Rust là một nhược điểm không ngờ tới
Một nhà phát triển xây dựng game engine bằng C và phát triển game bằng Lua
Làm việc với Rust gần như lúc nào cũng khó hơn
Mục tiêu của dự án là để người anh/em không biết lập trình cũng có thể đóng góp