Team Size: 7 ⏱️ 2 Month Internship 🎭 Steam Integration 🎭 Analytics
I've done a 2-months internship for Tiny Toad working with Unity 6.0.
My task were:
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
Images & general information's (genre, gameplay, …) will be revealed once the game will be publicly announced.
Needs: Analytic Tracking System to evaluate player gameplay data and iterate on the game design and balancing.
Solution: Using webhook to send the runtime data into a google spreadsheet that will store and automatically process the data (Using JavaScript and Sheet Formulas).
Benefits:
During a game session, two type of data are sent to the spreadsheet:
Those data are sent in CSV format and spread into dedicated "data" sheet used for Session, General Game Data, Played Level data's.
When we change the game version, or just want a total wipe of the data, I've set up a button that clear the whole spreadsheet's data's sheet. (To keep the previous data we just copied the whole spreadsheet into an inactive copy, they are around 0.3 - 1 Mb depending of the data's collected)
A value of 20 means that the player have run at least 20 times the first level, and or spent more than 160 minutes playing the game.
A level can be split in multiple segments; I've applied the same technique of data collection from the level to each segments, to have a detailed tracking of player data.
As being an "heavy" CSV file, it cannot be exported to the sheet as the level data per player, so I decided to export it to Discord as a text file.
Then the content of this file is exported (with a simple copy & paste) to a special location in the Spreadsheet that will populate the segment data and automatically process them.
On the Discord server used for development, I've setup 2 webhook and channels to store a few Runtime data and the location to store segment data's.
The Session ID allow us to retrieve the player data's in those channels.
In this example of Player DPS Distribution, we can see the "Victory Threshold" that is the hard limit if the player has enough damage per seconds to kill the level boss or not.
In one script I was able to manage the stats and the achievement check and update.
With 66 achievements, one place to manage them all was the best solution to not have them spread everywhere inside the project.
I created an "Achievement Class" array that contains the achievement data loaded at the game initialization from Steam, and it loop every seconds through a list to check if one ore more condition are met (Completed ones are ignored).
For the demo I added 2 Achievements:
Using the same script, I added a list for the demo achievements to check.
I've setup 4 leaderboards, that load only when the player needs them.
It also load the "score" leaderboards data at the end of a game in order to display the player ranking at the right of its score.
For the demo I setup 3 leaderboards based on the "normal" ones:
My setup was to use the same Leaderboards ID between each project versions in order to not have additional code to re-write and re-use the current one.