ロブロックス(Roblox)のドアの作り方|近づくと開く自動ドアとカギで開くドアを画像で解説

制作手順難易度: 上級所要時間: 約40分(目安)情報確認日: 2026年10月17日

「近づくと開く自動ドアを作りたい」「カギを見つけたら開くドアで、謎解きのゲームを作りたい」

ロブロックス(Roblox)スタジオでドアを作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。この記事では、近づくと横にスライドして開く自動ドアと、カギを拾ってからEキーを押すと開くドアの2つを作ります。ドアをなめらかに動かすのには、TweenService(トゥイーンサービス)という仕組みを使います。

上級ステップ2/40 前の記事:ロブロックス(Roblox)のエレベーターの作り方 全体の順番を見る

使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。近づくと「Eを押して○○する」と出る部品(ProximityPrompt)はNPCの作り方、拾って持てる道具(Tool)は手に持てるアイテムの作り方で使ったものと同じです。

今回の完成状態:下の画像のように、黄色いカギを持って赤いドアの前でEキーを押すと、ドアが右へスライドして開けば成功です(赤い枠)。

ドアの部品

名前役目
WallLeft・WallMiddle・WallRight(壁)ドアの横の壁。固定する
AutoDoor(青いドア)近づくと左へスライドして開く自動ドア
KeyDoor(赤いドア)カギを持っている人がEを押すと右へスライドして開くドア
ProximityPrompt赤いドアに近づくと「E 開ける」と出る部品
Key(黄色いカギ)触れると拾える道具(Tool)
DoorService2つのドアを動かすスクリプト

ドアは、壁より少し手前(スポーン地点の側)に置きます。開くときは、壁の手前をスライドして横へ動きます。

1. 部品を入れるフォルダーを作る

新しいBaseplateを開き、エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

出てきた一覧の検索欄に「Folder」と入れ、一覧の「Folder」を押します(赤い枠)。

Workspaceの中にFolderが入ります。エクスプローラで選んだままF2キーを押し、名前を「Doors」に変えます(赤い枠)。

2. 左の壁を置く

エクスプローラの「Doors」を選んだ状態で、名前の右に出る「+」を押します(赤い枠)。

一覧の検索欄に「Part」と入れ、一覧の「Part」を押します(赤い枠)。

Doorsの中にPartが入ります。エクスプローラで選んだままF2キーを押し、名前を「WallLeft」に変えます(赤い枠)。

プロパティの検索欄に「Size」と入力し、Sizeを「12, 10, 1」にします(赤い枠)。横に長くて背の高い、薄い板になります。

プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「-15, 5, -20」にします(赤い枠)。スポーン地点の左奥に壁が立ちます。

プロパティの検索欄に「BrickColor」と入力し、BrickColorを「Brick yellow」にします(赤い枠)。

プロパティの検索欄に「Anchored」と入力し、チェックを入れて固定します(赤い枠)。

3. 真ん中と右の壁を置く

エクスプローラでWallLeftを選んでCtrl+Dキーを押すと、同じ設定のパーツが複製されます。選んだままF2キーを押し、名前を「WallMiddle」に変えます(赤い枠)。

WallMiddleを選んだ状態で、プロパティの検索欄に「Size」と入力し、Sizeを「6, 10, 1」にします(赤い枠)。

プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「0, 5, -20」にします(赤い枠)。2つの壁のあいだに、ドアを入れるすき間ができます。

右の壁は、左の壁と同じ大きさです。エクスプローラでもう一度WallLeftを選んでCtrl+Dキーを押します。WallMiddleを複製すると幅が6の壁になるので、選ぶのはWallLeftです。

選んだままF2キーを押し、名前を「WallRight」に変えます。

WallRightを選んだ状態で、プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「15, 5, -20」にしてEnterキーを押します。3つの壁は次の表のとおりです。

名前SizePosition
WallLeft12, 10, 1-15, 5, -20
WallMiddle6, 10, 10, 5, -20
WallRight12, 10, 115, 5, -20

エクスプローラのDoorsの中に3つの壁が並び(画像の1)、3D画面には、すき間が2つある壁ができます(画像の2)。

4. 自動ドアを置く

ドアは、すき間と同じ大きさのWallMiddleを複製して作ります。エクスプローラでWallMiddleを選んでCtrl+Dキーを押し、選んだままF2キーを押して、名前を「AutoDoor」に変えます(赤い枠)。

AutoDoorを選んだ状態で、プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「-6, 5, -19」にします(赤い枠)。左のすき間の、壁より1スタッド手前にドアが入ります。

プロパティの検索欄に「BrickColor」と入力し、BrickColorを「Pastel light blue」にします(赤い枠)。水色のドアになります。

WallMiddleを複製したので、Anchoredのチェックは入ったままです。ドアも固定したままにします。固定したパーツでも、記事の冒頭で触れたTweenService(ドアをなめらかに動かす仕組み)を使うスクリプトなら動かせます。

5. カギのドアを置く

エクスプローラでAutoDoorを選んでCtrl+Dキーを押し、選んだままF2キーを押して、名前を「KeyDoor」に変えます(赤い枠)。

KeyDoorを選んだ状態で、プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「6, 5, -19」にします(赤い枠)。右のすき間にドアが入ります。

プロパティの検索欄に「BrickColor」と入力し、BrickColorを「Bright red」にします(赤い枠)。

名前SizePositionBrickColor
AutoDoor6, 10, 1-6, 5, -19Pastel light blue
KeyDoor6, 10, 16, 5, -19Bright red

6. カギのドアに「E 開ける」を出す

エクスプローラの「KeyDoor」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「ProximityPrompt」と入れ、一覧の「ProximityPrompt」を押します(赤い枠)。

プロパティの検索欄に「Text」と入れ、「ActionText」を「開ける」、「ObjectText」を「カギのドア」にします(赤い枠)。テストで赤いドアに近づくと、この2つの言葉が出ます。

7. 拾えるカギを作る

カギは、拾って持てる道具(Tool)で作ります。エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「Tool」と入れ、一覧の「Tool」を押します(赤い枠)。

Workspaceの中にToolが入ります。エクスプローラで選んだままF2キーを押し、名前を「Key」に変えます(赤い枠)。名前は半角の「Key」にします。スクリプトは、この名前でカギを持っているかを調べます。

エクスプローラの「Key」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「Part」と入れ、一覧の「Part」を押します(赤い枠)。

Keyの中にPartが入ります。エクスプローラで選んだままF2キーを押し、名前を「Handle」に変えます(赤い枠)。Toolの中の「Handle」という名前のパーツが、手に持つところになります。

Handleを選んだ状態で、プロパティの検索欄に「Size」と入力し、Sizeを「0.6, 0.6, 2」にします(赤い枠)。細長い棒になります。

プロパティの検索欄に「BrickColor」と入力し、BrickColorを「Bright yellow」にします(赤い枠)。

プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「14, 1, -6」にします(画像の1)。スポーン地点の右前に、黄色いカギが置かれます(画像の2)。

プロパティの検索欄に「Anchored」と入力し、チェックが外れていることを確かめます(赤い枠)。カギは固定しません。固定すると、拾ってもカギがその場から動かなくなります。

8. ドアを動かすスクリプトを入れる

エクスプローラの「Workspace」の左の「▼」を押して閉じ、下の「ServerScriptService」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「Script」と入れ、一覧の「Script」を押します(赤い枠)。

Scriptが入り、中身の画面が開きます。エクスプローラで「Script」を押して選び、F2キーを押して名前を「DoorService」に変えます(赤い枠)。

プロパティの検索欄に「RunContext」と入れて、「▼動作」の欄にあるRunContextの一覧から「Server」を選びます(赤い枠)。

開いているDoorServiceの画面で、中身を全部消して、次のコードを貼り付けます。

local TweenService = game:GetService("TweenService")
local Players = game:GetService("Players")

local doors = workspace:WaitForChild("Doors")
local autoDoor = doors:WaitForChild("AutoDoor")
local keyDoor = doors:WaitForChild("KeyDoor")
local prompt = keyDoor:WaitForChild("ProximityPrompt")

local OPEN_DISTANCE = 10 -- この距離まで近づくと自動ドアが開く(スタッド)
local SLIDE = 6 -- ドアが横に動く長さ(スタッド)
local info = TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)

local autoClosed = autoDoor.CFrame
local autoOpened = autoClosed * CFrame.new(-SLIDE, 0, 0)
local keyClosed = keyDoor.CFrame
local keyOpened = keyClosed * CFrame.new(SLIDE, 0, 0)

-- 自動ドア:開け閉めを TweenService でなめらかに動かす
local autoIsOpen = false
local function setAutoDoor(open)
	if open == autoIsOpen then return end
	autoIsOpen = open
	local goal = { CFrame = open and autoOpened or autoClosed }
	TweenService:Create(autoDoor, info, goal):Play()
end

-- 0.2秒ごとに、自動ドアの近くに人がいるかを調べる
task.spawn(function()
	while true do
		local someoneNear = false
		for _, player in Players:GetPlayers() do
			local character = player.Character
			local root = character and character:FindFirstChild("HumanoidRootPart")
			if root and (root.Position - autoClosed.Position).Magnitude <= OPEN_DISTANCE then
				someoneNear = true
				break
			end
		end
		setAutoDoor(someoneNear)
		task.wait(0.2)
	end
end)

-- カギのドア:持ち物か手にカギ(Key)があるかを調べる
local function hasKey(player)
	local character = player.Character
	local backpack = player:FindFirstChild("Backpack")
	if character and character:FindFirstChild("Key") then return true end
	if backpack and backpack:FindFirstChild("Key") then return true end
	return false
end

local keyDoorOpen = false
prompt.Triggered:Connect(function(player)
	if keyDoorOpen then return end
	if hasKey(player) then
		keyDoorOpen = true
		prompt.Enabled = false
		TweenService:Create(keyDoor, info, { CFrame = keyOpened }):Play()
	else
		prompt.ObjectText = "カギがかかっている"
		task.wait(2)
		prompt.ObjectText = "カギのドア"
	end
end)

貼り付けたら、エクスプローラのServerScriptServiceの中に「DoorService」があるかを確かめます(赤い枠)。

コードの部分していること
TweenService:Create(…):Play()ドアのCFrame(位置と向き)を、今の場所から行き先まで少しずつ動かす
TweenInfo.new(0.6, …)動きにかける時間(0.6秒)と、動き方(最初は速く、最後はゆっくり止まる)を決める
CFrame.new(-SLIDE, 0, 0)閉じた場所から、横に6スタッドずらした場所を「開いた場所」にする
0.2秒ごとのループ自動ドアから、OPEN_DISTANCEで決めた10スタッドより近くに人がいれば開け、いなければ閉める
hasKeyその人の持ち物(Backpack)か、手に持っている物の中に「Key」があるかを調べる
prompt.TriggeredEが押されたら、カギがあれば赤いドアを開け、なければ「カギがかかっている」と2秒出す

ドアの開け閉めは、サーバーで動くこのScriptだけで決めます。

9. テストで自動ドアを確かめる

3D画面の上の作品のタブ「Place4」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。水色の自動ドアに歩いて近づくと、ドアが左へスライドして開きます(赤い枠)。ドアから離れると、また閉まります。

画像は、開いたすき間が見えるように、カメラを上から写しています。アバターがすき間を通り抜けています。右上の名前の欄はモザイクにしています。

10. カギのドアを確かめる

カギを持たずに赤いドアに近づくと、「E 開ける」と出ます。Eキーを押すと、上の小さな文字が「カギがかかっている」に変わり、ドアは開きません(赤い枠)。2秒たつと「カギのドア」に戻ります。

右前の黄色いカギまで歩いて触れると、カギを拾って手に持ちます(画像の1)。画面の下には、持ち物の「Key」が出ます(画像の2)。

カギを持ったまま、もう一度赤いドアに近づくと「E 開ける」と出ます(赤い枠)。

Eキーを押すと、赤いドアが右へスライドして開きました(赤い枠)。一度開いたカギのドアは、「E 開ける」が出なくなり、開いたままになります。

試したこと結果
水色のドアに近づく左へスライドして開き、離れると閉まった
カギなしで赤いドアのEを押す「カギがかかっている」と出て、開かなかった
黄色いカギに触れる拾って手に持ち、下に「Key」が出た
カギを持って赤いドアのEを押す右へスライドして開いた

数字を変えて調整する

変えたいこと変える場所例
自動ドアが開く距離OPEN_DISTANCE10 → 6にすると、ドアのすぐ前まで来ないと開かない
ドアが動く長さSLIDEドアの幅と同じ6にすると、すき間が全部あく
開くときの速さTweenInfo.newの最初の数0.6 → 1.5にすると、ゆっくり開く

ドアの幅を変えたら、SLIDEも同じ数にします。SLIDEがドアの幅より小さいと、開いてもすき間の一部がふさがったままになります。

ドアが開かないときの確かめ方

症状見るところ直し方
どちらのドアも動かないDoorServiceServerScriptServiceの中にあるか、RunContextが「Server」か。出力に赤い文字が出ていないか
出力に「Infinite yield possible」と出る名前Workspaceの中のフォルダーの名前が「Doors」か。ドアの名前が「AutoDoor」「KeyDoor」か。この表示の読み方はInfinite yield possibleの直し方で解説しています
カギを持っているのに開かないToolの名前Toolの名前が半角の「Key」か
カギが拾えないHandleToolの中のパーツの名前が「Handle」か、Anchoredのチェックが外れているか
ドアが壁の中に入って見えるドアのPositionドアのZが壁より1手前(-19)になっているか

AIに相談するときの伝え方

Roblox Studioでドアを作っています。
Workspace/Doorsの中にAutoDoor(固定)とKeyDoor(固定、ProximityPromptあり)、WorkspaceにTool「Key」(Handleあり)を置いています。
ServerScriptServiceのScriptで、TweenServiceを使ってCFrameを動かし、AutoDoorは10スタッド以内に人がいると開き、KeyDoorはKeyを持っている人がEを押すと開きます。
カギのドアを開けたら、持っていたカギがなくなるようにしたいです。

よくある質問

ドアを横ではなく上に開けたい

コードの CFrame.new(-SLIDE, 0, 0) は、横(X)にずらすという意味です。真ん中の数をずらすと上(Y)に動きます。上に開けるなら CFrame.new(0, 10, 0) のように、ドアの高さ(10)と同じだけ上げます。

チームによって開くドアにしたい

チームで通れるかを決めるドアは、チームの作り方で作っています。カギのドアと組み合わせると、「赤チームでカギを持っている人だけ」のように決まりを足せます。

次のステップ(上級 3/40)

次は、コインで買える画面と、商品の一覧を作ります。

→ ロブロックス(Roblox)のショップの作り方

次に知りたいことを選ぶ

次に読む記事