【Roblox Studio】テレポート装置をChatGPT先生に作ってもらった。

RobloxStudioの機能が全然わからないのでChatGPT先生に作ってもらっているのですが、中々うまくいきません。聞き方を明瞭にする必要があるっぽいのですが、そのへんもよくわかりません。

作成した本人もよくわかっていない備忘録です。ちゃんと動かないかもしれませんがご了承ください。
(一応動作確認済み)

ざっくりと仕組み。

  1. ブロックが触ってきた物体をチェックする。
  2. 触ってきた物体がプレイヤーだったらイベント開始。
  3. プレイヤーを設定したブロックの座標に移動させる。(テレポート)
  4. 3秒後にテレポート可能にする。
  5. イベント終了。

テレポート用のPartを準備する。

まずはWorkspaceの右側の + をクリックし、Folderを作成。「Teleport」という名前にします。

作成した「Teleport」フォルダの中にPartを2つ用意、それぞれTereportAとTereportBという名前にします。フォルダの配置や名前が違うとスクリプトが動かなくなるので要注意です。

↓色つけると区別しやすいです。

スクリプトの作成(をやってもらった)。

TeleportAのPartの + をクリックし「Script」を追加します。
名前は「TeleportScriptA」にします。

「TeleportA」のスクリプトを開いて、以下のスクリプトを貼り付けます。

local teleportA = script.Parent
local teleportB = game.Workspace.Teleport.TeleportB -- TeleportBのパスを指定

-- プレイヤーがteleportAに触れた時の動き
local function onTouch(other)
-- タッチ判定を無効化
teleportB.CanTouch = false

local player = game.Players:GetPlayerFromCharacter(other.Parent)
if player then
local character = player.Character
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")

if humanoidRootPart then
humanoidRootPart.CFrame = teleportB.CFrame -- TeleportBの位置にワープ
humanoidRootPart.Position = humanoidRootPart.Position + Vector3.new(0, 5, 0) -- Y座標を+5

--3秒後にタッチ判定を有効化
wait(3)
teleportB.CanTouch = true

end
end
end

-- Touchedイベントを接続
teleportA.Touched:Connect(onTouch)

↓こんな感じ。

↓動かすとこんな感じに。

テレポート装置を行ったり来たりさせてみる。

テレポートした側のPart、TeleportBにもスクリプトを追加して往復できるようにします。

内容は一緒です。BをAにしただけ。

local teleportB = script.Parent
local teleportA = game.Workspace.Teleport.TeleportA -- TeleportAのパスを指定

-- プレイヤーがteleportBに触れた時の動き
local function onTouch(other)
-- タッチ判定を無効化
teleportA.CanTouch = false

local player = game.Players:GetPlayerFromCharacter(other.Parent)
if player then
local character = player.Character
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")

if humanoidRootPart then
humanoidRootPart.CFrame = teleportA.CFrame -- TeleportAの位置にワープ
humanoidRootPart.Position = humanoidRootPart.Position + Vector3.new(0, 5, 0) -- Y座標を+5

--3秒後にタッチ判定を有効化
wait(3)
teleportA.CanTouch = true

end
end
end

-- Touchedイベントを接続
teleportB.Touched:Connect(onTouch)

↓こんな感じ。

スクリプトではワープ後、3秒経過するとタッチ判定を有効化して再度ワープできるようにしています。
(作ってもらった)

\( ´∀`)/