I’m using CollectionService to tag multiple items with the ‘Interaction’ tag. I then go through all them and see if the player is near them, and thus create a gui, otherwise delete the gui when they leave the area.
local function Render()
local Character = Player.Character
if not Character then return end
-- Check for tags
for _, v in pairs(CollectionService:GetTagged('Interaction')) do
if CollectionService:HasTag(v, 'Player') then
if v == Player then return end -- Player can't interact with themselves
v = v.Character -- Set v == the players character (so v.PrimaryPart below works)
end
if Player:DistanceFromCharacter(v.PrimaryPart.Position) <= ReachDistance then
-- Check for previous interact
for _, gui in pairs(Interactables:GetChildren()) do
if gui.Adornee == v then return end -- Don't create a second gui
end
local NewInteractGui = Interact:Clone()
NewInteractGui.Adornee = v
NewInteractGui.Name = v.Name
NewInteractGui.Parent = Interactables
ClosestAction = v
NewInteractGui.Button.Activated:Connect(function()
StartInteract(v)
end)
else
for _, gui in pairs(Interactables:GetChildren()) do
if gui.Adornee == v then
-- Previous interact found, destroy it
gui:Destroy()
end
end
end
end
end
RunService.RenderStepped:Connect(Render)
However I get problems where it doesn’t actually delete the gui when it loads another in the same spot.
robloxapp-20200817-1241291.wmv (2.6 MB)
Can see multiple problems in the vid. For one, one of the interactables dont get picked up, even when im standing on top of it, and doesnt work till i move away from the other 2.
Another problem is the gui’s not acting independently, so 2 stay on the screen, even tho I’m further than 20 studs from it.