プレイヤー(Humanoid)が Part の上に乗った瞬間、もう1つのPartに移動します。

  1. Workspace に Part を2つ追加します。
  2. 移動元のPart に Script を追加します。
  3. 移動先の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 を使って、少しだけ汎用的にしてみます。

  1. Workspace に Part を2つ追加します。
  2. 移動先の Part のみ Goal という名前にします。
  3. 移動元のPart に Script と ObjectValue を追加します。
  4. ObjectValue の名前を GoalPart に変更し、プロパティValue に Goal を設定します。
  5. Goalのプロパティ、AnchoredをONに、CanCollideをOFFに、Transparencyを1にします。
  6. さらに、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 プロパティに移動先のパーツに設定するだけになりますので、プログラムの使い回しが可能です。

さらに、複数の場所にテレポートする場合は、こちらの方法にした方が良いでしょう。

By schilverberch

ROBLOXでゲームを作ろう! 一緒にプログラミングを学びましょう。

2 thoughts on “プレイヤーの瞬間移動”
  1. こんにちは。九州福岡からです。

    一人息子がRobloxで遊ぶようになりまして。
    →先々の事を考えて、Luaの勉強をし始めました。(全くの素人=0からです。)

    ここの書き込み、ありがたかったです♪

    それでは失礼します☆

コメントを残す