The current method for permanently changing the on-screen mouse icon (so even a textbutton won’t change it. Yes changing active can keep it the same when hovered but not when clicked) is making an imagelabel track it which seems inefficient. This isn’t a studio request because I am wondering if there is a way to make the mouse stay the same when you click on something all the time instead of having to make the mouseicon change every time you click.
Apologies if this has been addressed already which wouldn’t surprise me but I can’t find any at the moment that ask this kind of question.
Already did this however when you click a clickable GUI element the mouseicon still changes, that’s my issue. I know changing active makes hover not an issue.
You can change the Icon property of PlayerMouse, though that will still be overridden by the Gui engine upon hovering over a GuiButton. You can also create a custom mouse using a SurfaceGui and other Gui objects, though developer-created Guis do not render over CoreGuis for security reasons.
In short, you cannot “permanently” change the mouse icon.
In 2019 do I really have to use this code still?
local button = script.Parent
local mouse = game.Players.LocalPlayer:GetMouse()
local icon = button.Parent.ImageLabel
If you only need your custom mouse ScreenGui to render on top of your other developer-created Guis, you can change the DisplayOrder of your icon ScreenGui to a value higher than every other ScreenGui (such as 1000, or math.huge if that’s supported).
With that, you can also void the entire need to flip between icons (get rid of MouseIconEnabled = true) and just implement your custom mouse icon fully in Lua and Gui objects.