A downloadable game

Development of a DOTS-based Game of Life Simulation

Overview

I embarked on the creation of a Game of Life simulation leveraging the power of Unity's Data-Oriented Technology Stack (DOTS). The core objectives were to achieve maximum performance and understand the unique development paradigms offered by DOTS.

Key Concepts and Structures

  • Entities and Components: The fundamental building blocks of DOTS were used. Cells were represented as entities, and their properties (alive/dead state, generation data, etc.) were stored in components.
  • Systems: The simulation logic was encapsulated in systems. These operated directly on component data for efficient iteration and updates, responsible for tasks like determining the next generation of cells, updating cell visuals, and handling user input.
  • Jobs: For maximum parallel processing, computationally intensive tasks like cell updates were offloaded to Burst-compiled jobs, allowing for multi-threaded execution.

Challenges and Optimizations

  1. Structuring Data for Performance: Initially using EntityCommandBuffer led to insights about data layout and its impact on performance. I learned to prioritize the use of native data types and direct updates.
  2. UI Integration: Limitations with using SystemAPI in UI event handlers led to a hybrid approach using both a singleton component for core simulation state and static flags for immediate communication between the UI and the main system.
  3. Memory Management: I consciously cleared static flags in the system's OnDestroy to prevent unintended state persistence between game sessions or scene reloads, ensuring proper resource cleanup in a DOTS context.

Learning Outcomes

Through this project, I gained a deeper understanding of:

  • Data-Oriented Design: I shifted my thinking to focus on data layout and efficient processing.
  • DOTS Systems and Jobs: I learned how to structure game logic into systems while harnessing the power of parallel computation with Burst compilation.
  • Trade-offs and Pragmatic Solutions While aiming for ideal DOTS patterns, I encountered real-world constraints and learned the importance of balancing performance with practicality.

Future Improvements

  • Advanced Job Techniques: Exploring more SIMD optimizations and techniques for complex dependencies in the job system.
  • Enhanced UI and Visuals: Potential for more interactive UI and the use of Burst and the DOTS rendering pipeline to implement optimized visualization of a large grid.

Conclusion

This project has been an excellent exercise in performance-minded game development. DOTS forced me to re-evaluate my usual development patterns, leading to valuable insights and optimization skills.

Download

Download
DOTS Community Challenge.zip 748 MB

Install instructions

Its a full zip of the unity project because I couldn't get past the build errors.

Leave a comment

Log in with itch.io to leave a comment.