I tried the script from this link from the Wiki to make a part slide smoothly to another location.
However, when I tried it on the actual part. It only moves extremely slowly, and it takes longer than the amount of time I expect to get to the target location. I don't know why. It will be great if you explain how this works as well (with your OPINION, not stuff from the wiki). I am looking forward to check out your thoughts! :)
Here is the code:
local Part = script.Parent.Parent:WaitForChild("KillerWall") -- this is the Part we will move
local newPos = Part.Parent:WaitForChild("WallStop").Position -- the position the Part will go to
local Time = 10 -- the time that the script will take to move the part
local Increment = 0.1 -- the Part will move this amount of studs each time it moves
local Debounce = false
local Diff = newPos - Part.Position -- the difference between the two positions
local Mag = Diff.magnitude -- the distance between the two parts
local Direction = CFrame.new(Part.Position, newPos).lookVector
script.Parent.Event:connect(function () -- function to move the Part
if Debounce then return end -- end the function if debounce is true (just in case the event is fired several times.)
Debounce = true -- make Debounce true so the function can't run
for n = 0, Mag, Increment do
Part.CFrame = Part.CFrame + (Direction * Increment)
wait( (Time/Mag) * Increment ) -- This is the problem!!! (I think...)
end
Debounce = false -- set Debounce to false so the function can run again
end)

4 comments
one more thing, when I set the Time to 1, it takes about 40-45 seconds for the part to move to its location. What gives??? (srsly, im confused...)
Well, first. Are you mulitplying it by the increment?
wait( (1/Mag) * Increment )then i want the part to finish moving in EXACTLY the number from the Time variable.
thx i love how u explain the stuff to me.