First let me thank you for this great feedback. I will share this with the team to make sure it’s all digested internally. Now let me answer where I can.
Ideally, default platforms are configured per build profile, and additional platforms can be runtime-selected by the game at startup.
Yes, you’re totally right on this point, and we’re working to get a build profile settings override component to support this exact workflow.
In the future you may want to add support for the Epic Games Store; or for GameKit and Steam support on Mac.
We’ve had lots of feedback on EGS and we’re looking into that, it’s clearly a priority for developers and we will make sure to take that into account.
For Mac support, we’ve done less testing there so we didn’t want to claim support out of the gate but the existing support packages should work. We will update the docs as we do more testing around those platforms.
The default iOS save system should be using CloudKit, not GameKit, as GameKit is not portable to tvOS. This will inevitably create compatibility problems down the line when a game developer tries to add tvOS as a platform in the future and finds that their existing save games can’t be migrated easily.
I don’t have an answer for this right now. I’ll make sure to talk with the team about this point.
While it’s convenient to link platform capabilities such as the Saving and Achievements systems together into an umbrella platform, ideally these can also be individually selected and used independently. For example, an iOS game may need to use the GameKit achievements system but with an iCloud save system. Or two save systems may need to be loaded simultaneously in order to migrate saves from one platform to another.
We do support getting save systems from different places. You can for example get two saves systems on mobile to support moving of saves between local storage and cloud storage.
The current implementation of the save systems using GenericLocalStorageSystem has a pretty high overhead for small incremental autosaves.
I’ve passed this on to the dev team to take a look at.
Small bug: PlatformToolkit.Initialize should guard its reentrancy check before awaiting async
I have forwarded this to the dev team to take a look at.
Documentation: I would love for the documentation to be clearer on platform limitations, rather than “Platforms might have different size limitations and capabilities” and “Platforms have different maximum name length restrictions, so it’s recommended to keep the name short.” – specify exactly the maximum common length that is supported by all known platforms, this avoids developers encountering headaches down the line when they port their game to a new platform. Additionally, there are case-sensitivity issues that affect some platforms that should be documented. Even better if the platform toolkit asserts if these limits are exceeded in play mode.
We have to be quite careful about making specific claims regarding behaviours and capabilities of NDA platforms as I’m sure you understand. The platform specific documentation goes into more detail than the core package documentation, but I agree that this isn’t idea.
In the cases where we’re able to enforce a common minimum capability, such as in the case of case sensitivity of file names across platforms, we actually do that. Which is why the save file name character set is so restrictive.
We are working on editor-time validation features that will warn where common platform limits are breached, for example read/write frequencies. To hopefully ensure that poor read/write discipline is discovered as early as possible in development.
Thanks again for the great feedback! I hope this is helpful, and that we can keep improving the toolkit to meet your needs!