I think instead of GetPartBoundsInBox, you could try using GetPartsInPart(), you pass in the part to act as your zone and it’ll return to you what parts are currently touching the part as a table, then you go through the table and check if the player is still in the part and if they are, keep the UI or else remove the UI
Alternatively, if you prefer a simpler approach that doesn’t require programming everything yourself, you could try using ZonePlus, a module made by ForeverHD to create zones easily