Architect of Ruin: A Game Engine Switch
The developer initially chose Bevy (Rust) but shifted to Unity (C#) due to collaboration, iteration, and ecosystem advantages. Bevy's early stage caused challenges in collaboration, abstraction, and migration. Unity offered faster experimental development, team contributions, and improved maintainability, accelerating progress and leveraging tools. The switch, despite difficulties, ultimately strengthened the project.
- Initially chose Bevy (Rust) for "Architect of Ruin" due to love for Rust and Bevy's ECS and community.
- Switched from Rust/Bevy to C#/Unity in January 2025 after about a year of development.
- Switching engines is a classic project killer, potentially causing nosedives in productivity and regressions.
- Despite positive experiences in Bevy (learning about Spine, custom render pipelines, good community), practical challenges emerged.
- Anticipated some challenges using an early-stage engine, but they "bit harder than expected."
- Emergent Problems:
- Collaboration: Difficult to onboard a new coder (brother) with Rust's unique aspects on top of game dev.
- Abstraction: Rust's low-level focus didn't suit rapid, high-level gameplay iteration. Desire to ship "fun gameplay" outweighed building with Rust.
- Migration: Bevy's rapid evolution caused API thrash with each update, leading to significant debugging effort due to common minor regressions in core systems. A specific sprite rendering issue was a tipping point.
- Learning: AI tools were less effective with rapidly changing Bevy/Rust compared to stable C#/Unity documentation.
- Modding: Concerns about Rust/Bevy limitations for modding (lack of scripting solution, unstable ABI).
- These factors (smoother collaboration, high-level abstraction, productivity, modding) led to a re-evaluation.
- Initially "disregarded Unity" due to past pricing crisis and assumptions about C# and 2D support.
- Did a cost-benefit analysis comparing Unreal, Unity, Godot, staying in Bevy, and rolling own engine based on criteria: Collaboration, Abstraction, Migration, Learning, Modding.
- An afternoon of research showed Unity scored high.
- Decided to run an experiment: spend 3 weeks (10% effort) on three core features in Unity to see if the other 90% port was worthwhile.
- Experiment features: Tilemap, Characters (Spine, customization), and UI (moddable, focused on Noesis).
- All three experimental tasks were completed in just 3 days.
- Tilemap implemented in one day; main menu and HUD implemented using Noesis the same week.
- Demonstrated a significant boost in the brother's ability to contribute quickly in Unity (never having written C# before).
- Finished rewriting remaining systems in C#/Unity over the next six weeks.
- Porting validated experimental findings: gameplay systems less verbose, code size shrank substantially, maintainability improved.
- Less update migration anxiety; progress was constant.
- Past three months of development in Unity have measurably improved day-to-day work, with faster iteration.
- Able to leverage ecosystem tools like A* Pathfinding Project.
- Localization is an unsolved area in Unity compared to Rust's Fluent.
- Key conclusions: Failed to fairly evaluate options initially; "burn time to earn time" - switching put them ahead; still respects Rust and Bevy but Unity was better for "Architect of Ruin"'s needs (collaboration, iteration speed, stable ecosystem, modding).
- Difficult decision, but put the project in a stronger position.