Note: I originally intended this post to be about all CoreGUIs, but halfway through writing it realized most CoreGUIs do already have methods to get their state or size:
- Chat:
ChatWindowConfiguration,StarterGui:GetCore - Mobile controls:
GuiService(bool state only, but they’re predictable)
As such, the missing links left are:
- Player list
- Inventory bar
As a Roblox developer, it is currently too hard to design complex UI that does not interfere with Roblox’s CoreGUIs. My main pain point is the player list but this applies to other CoreGUIs too.
As their name implies, CoreGUIs are a core part of any Roblox experience and I believe an exemplary game should not have them hidden/modified, as familiarity is an important factor in user experience. I understand that giving us full access to CoreGUIs has been discussed earlier and is not an option, however that’s not exactly what I am asking for.
If I want to design an user interface that is fully cross-platform, I actually have zero free edges at my disposal. All of them are taken up by something, be it the player list, chat, mobile controls, or the inventory. Roblox deliberately obscures the type of device that the player is using (not saying that it’s wrong), so we basically have no idea which areas are open for us to use (except the topbar).
Common workarounds I’ve seen in use include:
- Hiding CoreGUIs
Not optimal for keeping a familiar user experience, in the case of the player list harms user engagement, the same mechanism why the infamous “locks” were added to chat - Ignoring the presence of CoreGUIs
Very bad, forces players to hide/unhide chat or the player list manually. Makes me want to leave the game honestly - Restricting user interface placement to “safe” areas
This is what I do, but it forces me to squeeze buttons in odd places, such as the bottom right half of the screen, and I still can display less buttons than if I knew where the CoreGUIs are.
Example Issue: Train simulator power slider
(screenshot from a non-Roblox mobile game, imagine this but on the right)
Naturally, this kind of slider should be long for the best precision. On a mobile device I would use the full available height, however on a computer that’s unnecessary and I would rather present the player list to the user in the top half of the screen. As I am aware, currently there’s no way to differentiate when the player list is actually shown or not (when it is enabled). Additionally, the slider should have a margin on mobile devices because of system notification bar and navigation pull-down/up gestures.
This is just an example, and I probably could figure out something else in this case, but it becomes problematic when the user interface gets denser (I make vehicle simulation games, lots of buttons).
A few other Roblox developers have previously stumbled across this problem, without a decent solution:
- Cannot check if PlayerList is visible
- Checking if the player list was manually closed
- How to detect if player has hidden the player list?
If Roblox is able to address this issue, it would improve my development experience significantly as I would be able to make better use of screen real estate. I acknowledge that this mostly involves edge cases and complex UI systems (and my purism), but I would still appreciate if Roblox engineers put this on their to-do list. After all, CoreGUI and PlayerGUI always exist on the same screen and they should cooperate nicely.
