Robloxでテレポートするブロックを作る
2019-04-30

Robloxでテレポートするブロックを作る

Robloxでプレイヤーが触ると別の場所にテレポートするブロックを作ってみましょう。

テレポートするブロックを作る

まず、Workspaceの中にTeleportというフォルダを作成して、必要なもの一式を追加します。

追加するものは次の通りです。

  • TeleportScript - Luaスクリプト
  • Teleport1A - テレポートブロックA(青色)
  • Teleport1B - テレポートブロックB(ピンク色)

TeleportScriptの骨子を作る

TeleportScriptの大まかな処理を書きましょう。

基本的にはそれぞれのブロックのTouchedにイベントハンドラを設定して、あとで中の処理を書いていきます。

local Teleport1A = script.Parent.Teleport1A
local Teleport1B = script.Parent.Teleport1B

-- A -> B へテレポート
local function TeleportA2B(part) 
end

-- B -> A へテレポート
local function TeleportB2A(part) 
end

Teleport1A.Touched:Connect(TeleportA2B)
Teleport1B.Touched:Connect(TeleportB2A)

テレポート処理を書く

まず「A->B」のテレポート処理を書きます。

「B->A」は基本的に「A->B」と同じなので割愛します。

...

-- A -> B へテレポート
local function TeleportA2B(part) 
  local humanoid = part.Parent:FindFirstChild("HumanoidRootPart")
  if humanoid then 
    -- プレイヤーの位置をテレポートブロックBにする
    humanoid.CFrame = Teleport1B.CFrame
  end
end

...

まず、Touchしたものがプレイヤー(Humanoid)かどうか判定します。プレイヤーの場合は、プレイヤーをテレポートブロックBにテレポートさせます。

プレイヤーを移動するにはCFrameというものを使います。CFrameとはRobloxゲーム上の3Dオブジェクトの中心の座標を表すものです。

CFrameについては、まだよく理解できていないので詳しい説明はできませんが、基本的には(x, y, z)軸の数値を設定することで、指定した3Dオブジェクトの中心の位置を制御することができます。

では、早速テレポートブロックAに触れてみましょう。

(え!?)

テレポートブロックに埋まってしまいました。全く動けません。

これは、テレポート先がテレポートブロックBの中心になってしまったためです。
ですので、テレポート先を少し上の方に調整する必要があります。

...

-- A -> B へテレポート
local function TeleportA2B(part) 
  local humanoid = part.Parent:FindFirstChild("HumanoidRootPart")
  if humanoid then 
    -- プレイヤーの位置をテレポートブロックBから高さ5上ににする
    humanoid.CFrame = Teleport1B.CFrame + Vector3.new(0, 5, 0)
  end
end

...

Vector3は(x, y, z)軸を設定するクラスです。
左から順にx軸(横)、y軸(高さ)、z軸(奥行き)を設定します。今回の例だとVector3.new(0, 5, 0)なので、高さだけ5に設定しています。

今度はうまくいきました。

ちなみに、Vector3.new(0, 50, 0)に設定すると、テレポート先を上空に設定することができます。

まとめ

Robloxでテレポートするブロックの作り方でした。

見慣れないCFrameというものが出てきました。大事な概念のようなのでマスターしておきたいです。