プレイヤー(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とても楽しいですよね。
私も息子と一緒に遊んだり、ゲームを作って楽しんでいます。