As a developer it is currently impossible to sink mouse input without showing the “hovering over button” cursor without hacks that are each suboptimal in their own way.
In My Movie, the bulk of our game happens in a full screen UI, the video editor. However any UI behind the video editor (such as in world) is still possible to click. Watch my cursor as it, from my point of view, randomly changes to a hover mouse.
Yikes, that’s the toggle mic button!
Scary thing to click on without knowing!
Today, the only way to sink mouse input is to use a big button (or otherwise Active) element that covers the area. But this replaces the mouse with that same hover icon, making for a very janky experience as it becomes harder for a user to know what is actually interactive. Furthermore, active elements explicitly override any custom mouse icon you set, so you cannot even easily work around this.
Bad Solutions
- Turn the mouse icon off, and render an ImageLabel where it’s supposed to be
This means I have to track whether or not we’re hovering over something active on my own, but it also means it will never overlap any core UI, such as the top bar. It also means I have to recreate any other contextual events, such as hovering over a TextBox changing to the I-bar cursor.
- Don’t use buttons anywhere and only use UserInputService
This is not only a nightmare to work with, but also it doesn’t help when Roblox adds their own world buttons, in this case the toggle voice button.