次は「 ワープ 」を作りますが、これは実は普通の Script(LocalScriptではない) で作ります。「 ステージ側の仕掛け 」だからです。今日学んだ違いを意識しながら進めましょう。
ワープするブロックを作ろう
まず、ワープブロックとワープ先の目印ブロックを2つ作りましょう。ワープ先の方は名前を必ず「 ワープ先 」にします。両方とも「 固定 」も忘れずに。
複数のワープを作りたい時のコツ
ワープを1組だけならこのままでも動きますが、ステージに何組もワープを置きたい場合は、2つのブロックを右クリック→「 フォルダとしてグループ化 」してひとまとめにしておくと、後で管理しやすくなります。フォルダごと複製すれば、同じ仕組みのワープをいくつでも増やせます。
次にワープ元のブロックに、普通の Script を入れます。
local teleportFrom = script.Parent
local folder = teleportFrom.Parent -- 自分がいるフォルダ
local teleportTo = folder:WaitForChild("ワープ先") -- 同じフォルダの中から探す
teleportFrom.Touched:Connect(function(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
local rootPart = hit.Parent:FindFirstChild("HumanoidRootPart")
rootPart.CFrame = teleportTo.CFrame + Vector3.new(0, 3, 0)
end
end)
ポイント
folder:WaitForChild("ワープ先")のように、「 同じフォルダの中 」から相手を探す形にしておくと、フォルダごと複製するだけで、ワープ先の名前をいちいち書き換えなくても正しい相手を見つけてくれます。
動作確認クリップ挿入予定(10-clip02.mp4)
ワープブロックに触れて別の場所に移動する様子(15秒程度)
解説
HumanoidRootPart は、キャラクターの位置の基準になる特別なパーツです。ここのCFrameを書き換えることで、キャラクター全体を瞬間移動させられます。+ Vector3.new(0, 3, 0) で少し高めに出現させ、地面にめり込まないようにしています。
今回のワープはScript(ステージ側)で作りました。「 プレイヤーの入力に関わる 」わけではなく、「 ステージの仕掛けとしてキャラクターを動かす 」処理だからです。全部LocalScriptにすればいいわけではない、という点を覚えておきましょう。
Well done!
次のステップに進みましょう!