I don't have any experience with moving GUI or using X-Y with Script..
(Needed more characters to post question)
There are multiple ways to move a GuiObject! The easiest way would definitely be to use Tweening. There is a function for GuiObjects called TweenPosition
that will give you a smooth transition - here's the syntax:
[GuiObject]:TweenPosition( [Desired UDim2] , [EasingDirection] , [EasingStyle] , [Time] )
You don't really have to worry about the EasingDirection or EasingStyle arguments most of the time - just input "InOut" and "Linear".
The Desired UDim2 argument is where you want your GuiObject to go to, and the Time argument is how much time the transition should take.
Reference the wiki for descriptions of the arguments if anything is still unclear.
Here's what it would look like in use:
local GuiObject = script.Parent; GuiObject:TweenPosition(UDim2.new(.5,0,.5,0),"InOut","Linear",1);