✓ Accepted answer
Improvements
You can get smooth motion with the TweenService (GuiObjects have their own special function for this). In addition, TweenPosition has a parameter to prevent being overriden
Issues
Assuming this is a Server Script, make sure the Gui is parented to the player's PlayerGui or otherwise use a LocalScript and place the Gui into the StarterGui (in which case you'd have to reference the "part" directly, since otherwise, the Gui would not be visible to the player who touched the part.
Revised Local Script
local part = script.Parent
local menu = part.Parent:WaitForChild("ShopFRAME")
local debounce = false
part.Touched:Connect(function(hit)
if hit and hit.Parent then
local player = game:GetService("Players"):GetPlayerFromCharacter(hit.Parent)
if player then
local pgui = player:WaitForChild("PlayerGui")
local clone = nil
if not pgui:FindFirstChild("ShopFrame") then
clone = menu:Clone()
clone.Parent = pgui
else
clone = pgui:WaitForChild("ShopFrame")
end
if debounce == false then
debounce = true
clone:TweenPosition(menu.Position + UDim2.new(1.125, 0, 0, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, 0.2, false, nil)
elseif debounce == true then
debounce = false
clone:TweenPosition(menu.Position + UDim2.new(-1.125, 0, 0, 0), Enum.EasingDirection.In, Enum.EasingStyle.Linear, 0.2, false, nil)
end
end
end
end)
2 comments
You should use TweenPosition instead
Wdym? can you show me an example?