プレイヤー(Humanoid)が Part の上に乗った瞬間、もう1つのPartに移動します。
- Workspace に Part を2つ追加します。
 - 移動元のPart に Script を追加します。
 - 移動先のPartの名前をGoalにします。AnchoredをONに、CanCollideをOFFにします。さらに表示したくので、Transparencyを1にします。
 
local goal = game.Workspace.Goal
local offset = Vector3.new(0, 3.5, 0) -- 3.5はgoalパーツを地面に設置した場合
local function onTouch(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
 
    if humanoid then    -- 上に乗ったのがプレイヤーだったら
        game:GetService("RunService").Stepped:wait()
        local hrp = character.PrimaryPart
        hrp.CFrame = goal.CFrame + offset
    end
end
script.Parent.Touched:Connect(onTouch)    -- Touched イベントの設定
汎用的にする方法
上記のプログラムを ObjectValue を使って、少しだけ汎用的にしてみます。
- Workspace に Part を2つ追加します。
 - 移動先の Part のみ Goal という名前にします。
 - 移動元のPart に Script と ObjectValue を追加します。
 - ObjectValue の名前を GoalPart に変更し、プロパティValue に Goal を設定します。
 - Goalのプロパティ、AnchoredをONに、CanCollideをOFFに、Transparencyを1にします。
 - さらに、Goal の位置をキャラクターモデルのPrimaryPartであるHumanoidRootPartの位置に合わせたいので、地面から3.5スタッド上に移動します。
 
local part = script.Parent
local goal = part.GoalPart.Value
local function onTouch(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
 
    if humanoid then    -- 上に乗ったのがプレイヤーだったら
        game:GetService("RunService").Stepped:wait()
        local hrp = character.PrimaryPart
        hrp.CFrame = goal.CFrame
    end
end
このようにすると、GoalPart の Value プロパティに移動先のパーツに設定するだけになりますので、プログラムの使い回しが可能です。
さらに、複数の場所にテレポートする場合は、こちらの方法にした方が良いでしょう。

こんにちは。九州福岡からです。
一人息子がRobloxで遊ぶようになりまして。
→先々の事を考えて、Luaの勉強をし始めました。(全くの素人=0からです。)
ここの書き込み、ありがたかったです♪
それでは失礼します☆
Robloxとても楽しいですよね。
私も息子と一緒に遊んだり、ゲームを作って楽しんでいます。