I’m currently working on an arcade racing game (Unity XR, MP - client-host, Meta Horizon) where I need to store global leaderboard + ghost data (imagine TrackMania). Now I’m looking at Unity Gaming Services (UGS) documentation to decide if UGS can work for my game and have some questions:
What is the limit of global leaderboard entries (need to show the global ranking for the player)?
Which service could I use to store and share ghost data and pair it with leaderboard entries (players have the ability to download ghosts of other players from the leaderboard)?
Some clarification on ghost data: its a binary file (to reduce file-size) containing time, position, rotation entries which are later on read and simulated via a non-interactable gameobject when the gameplay starts.
Pricing page has recently been changed to “free for a limited time” for Leaderboards. This probably indicates the service will eventually be paid and this might include a storage or traffic cost, although I think storage costs are unlikely given that each entry can be 1 KB at most.
Cloud Save or User Generated Content
Cloud Save can store arbitrary binary data, although all examples revolve around json. You can simply convert byte[] to string and back using the .NET encoding methods.
Thanks for the reply! I quickly looked into the docs & limitations of the services you mentioned.
It seems that “Cloud Save” would not work in my case as the 5MB limitation for “Player Data” is not enough for me to store replays (each file is about 200-1,000kb, also I have many levels so…), same issue with “Game Data”. The “Player Files” data is not accessible by other players based on docs so that is also not an option.
So I guess the only way is “User Generated Content”, where I could:
Save the replay to “User Generated Content”, get the unique id of the replay
Create a leadearboard entry and store unique replay id in metadata
When fetching replays, fetch the leadearboard entry and then the replay from “User Generated Content” based on the unique id stored in metadata
Yes UGC seems to be the way to go. Although I wonder if it shouldn’t be the other way around, or ideally both ways: Store the player id (plus board id) in UGC so that when browsing the leaderboard, you can access that player’s replay too. I think it’s more common to locate content by player ID but this of course depends on the design.
I think storing the player id UGC also makes sense, its not that much data after-all when compared to actual replay data. Though I’ll have to play around with the APIs to see whats up. Thank you for the replies!