In the past two weeks, we were assigned the task to create an analytics tool that consisted of a number of different modules, a movement recording module, a player replay system and a heat map generation system. In our group, this separated nicely into four modules, I was assigned to create the system that replays the player’s movements. The first thing that we thought to do was to create a Technical Design Document, which details out the specifics of the project and so we could discuss how the system was going to work. The first essential item that we had to decide was how the information was going to be stored and read so that it was able to be passed through all the systems. We decided on a MovementDataPoint which includes the data:
- Vector3 Position – the position of the specified GameObject
- Quaternion Direction – the direction in which the specified GameObject is facing
- float TimeStamp – the time elapsed since the beginning of the recording
This class data set is used throughout the project and was to record on every update if the player’s position, direction and time since the beginning of the recording. After deciding on this we saw that each system was connected only through the data loading and saving system which meant so long as the data was good it allows us to work relatively independently on our systems and focus on getting them working.
After breaking the repository (where the file directories were moved around and the files weren’t saved properly), we had to recreate the Repo and detailed out specifics in the TDD rules so as not to break the repo.
- Commit Your Changes
- Pull from master
- Merge the changes from master with your changes
- Test the merged changes
- New Commit for merged changes
- Push to master
When considering replaying the player’s movement my first initial thought on how to replicate this function was to update the player’s location and direction with the timestamp elapsed. I did this by creating a new GameObject that follows the position and rotation provided by the data and replaying it when a button is pressed. This worked well but didn’t feel quite functionally correct to only be able to run the replay through the actual game itself. So I decided to look for a better solution one that worked through the editor itself or have an intuitive UI. I quickly found the editor window function that creates a custom Editor that I can specify, this allowed me to create a dropdown list based on the files in a certain folder, simply ignore the .meta files and I was able to create a dropdown list based on all of the XML files able to be loaded. In terms of creating and moving an object based on the recording, it was fairly simple, after discovering the Update function in the editor it was easy to replicate the functionality in the initial movement playback script.
After this, there was not much to be done on my part of the project, it works fairly independently from the other modules, it simply needs to read in the correctly saved files. However, I still aimed to improve a number of features including adding in a 2x and half speed for the playback seemed useful. This was done simply by doubling or halving the timestamp aspect of each MovementDataPoint, and ensuring that the datapoint is removed if the timestamp has already been elapsed.

The final step of the project was to combine it all together, after a few minor setbacks with the heat map scaling the project was successfully compiled and uploaded to itch.io.
Leave a reply to Joshua Bidwell Cancel reply