The big improvement on VOEZ 1.1 from 1.0 is its overhauled song selection UI and it also made user experience better than the previous version.


  • The song selection menu should be responsive to user interactions.
  • It must load information (ex: score, song name) and play preview music once a user selects a song.
  • The menu should load song cover images dynamically while scrolling for less memory usage.
  • The codebase should be clear and extensible.


  • I proposed Model-View-Controller pattern to separate logical code from Unity-dependent code (i.e. MonoBehaviour).
    • The models encapsule datasets, such as songs, albums, scores, rankings.
    • The views are MonoBehaviour-derived objects and the other Unity-related objects.
    • The controllers are responsible to run game states and transfer data among views and models.
  • The texture cache holds all song cover images that will be rendered. It can release some least-recently used textures to store new textures.
  • We avoided to use global variables as possible. Controllers are responsible to hold and pass shared objects to their inner controllers. (yes, controllers can be nested)

What I learnt

  • Collabration with colleagues
  • Pair Programming
  • Code Review
  • Refactor Methods

Project link: https://www.rayark.com/g/voez/