Project: EDEN
A WebGL learning tool built to teach cyber security concepts through city building and management gameplay
Many aspects of this project are under NDA and cannot be discussed or disclosed.
Team and My Responsibilities
I worked on Project: EDEN for three months as part of a four person coding team working in tandem with separate design and art teams. I was responsible for the resource management system of the game, the minigame framework, and the networking chain between clients to host and hosts to server.
Game Description
Project: EDEN was an open-source colony management game for teaching cyber security to primary and secondary students. The game used a networked multiplayer environment developed in the Unity engine and built for WebGL. I conceptualized, designed, and developed a series of complex interlocking systems and databases to store the game state and manage in-game resources. These systems used complex Unity data structures such as ScriptableObjects and Structs to optimize organization of code. I also developed and managed the networked connection system between client players, host instance, and remote state server.
Challenge
The project required multiple complex interlocking systems. Many of the tech team's initial meetings were dedicated to outlining how to construct the experience that the design team communicated to us. However, the design continued to evolve and we were given new technical constraints from our client. Due to weak project management combined with these fluctuating requirements, we frequently had to shift the system architecture plans. The key challenge of the project was actively managing the system architecture of the experience as a whole while the design was still in flux. Staying agile while re-documenting and remaking some systems became a critical part of completing the job.
This challenge was most problematic to the function of the networking chain. The client program used multiple complex data structures, but these couldn't be synced to the host as the networking plugin could only transmit simple data types such as bools, ints, and strings. This meant that I needed to use a large key value library to transfer the values from client to host and then propagate the changes back to all the complex data structures on all the other clients. Then when I began to link our program with our project client's remote server used to track and save the game state, I once again had to change how the data was transferred and stored. Despite these challenges under tight time constraints, the team was successful in delivering a fully functioning product to our client
Development Environment / Tools Used
Project: EDEN was developed with the Unity engine, using the Mirror .Net library for networking. The team used Mattermost for communication and Perforce for version control. GitLab was used for task management. Zoom was used for video conferencing.
Highlight
In all of my other projects i have found that the Unity engine can be limiting in a number of areas. For instance when using singletons, race conditions can often make a game unplayable. Despite having minor control over when objects and scripts are loaded, there has not been a good way to solve this problem. I learned on this engagement the use of scriptable objects as an alternative to singletons to avoid the race conditions entirely. I further recognize that despite being an experienced programmer, it is important to continue to learn new techniques as a life long pursuit.