「近づくと開く自動ドアを作りたい」「カギを見つけたら開くドアで、謎解きのゲームを作りたい」
ロブロックス(Roblox)スタジオでドアを作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。この記事では、近づくと横にスライドして開く自動ドアと、カギを拾ってからEキーを押すと開くドアの2つを作ります。ドアをなめらかに動かすのには、TweenService(トゥイーンサービス)という仕組みを使います。
上級ステップ2/40 前の記事:ロブロックス(Roblox)のエレベーターの作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。近づくと「Eを押して○○する」と出る部品(ProximityPrompt)はNPCの作り方、拾って持てる道具(Tool)は手に持てるアイテムの作り方で使ったものと同じです。
今回の完成状態:下の画像のように、黄色いカギを持って赤いドアの前でEキーを押すと、ドアが右へスライドして開けば成功です(赤い枠)。

ドアの部品
| 名前 | 役目 |
|---|---|
| WallLeft・WallMiddle・WallRight(壁) | ドアの横の壁。固定する |
| AutoDoor(青いドア) | 近づくと左へスライドして開く自動ドア |
| KeyDoor(赤いドア) | カギを持っている人がEを押すと右へスライドして開くドア |
| ProximityPrompt | 赤いドアに近づくと「E 開ける」と出る部品 |
| Key(黄色いカギ) | 触れると拾える道具(Tool) |
| DoorService | 2つのドアを動かすスクリプト |
ドアは、壁より少し手前(スポーン地点の側)に置きます。開くときは、壁の手前をスライドして横へ動きます。
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つの壁は次の表のとおりです。
| 名前 | Size | Position |
|---|---|---|
| WallLeft | 12, 10, 1 | -15, 5, -20 |
| WallMiddle | 6, 10, 1 | 0, 5, -20 |
| WallRight | 12, 10, 1 | 15, 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」にします(赤い枠)。

| 名前 | Size | Position | BrickColor |
|---|---|---|---|
| AutoDoor | 6, 10, 1 | -6, 5, -19 | Pastel light blue |
| KeyDoor | 6, 10, 1 | 6, 5, -19 | Bright 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.Triggered | Eが押されたら、カギがあれば赤いドアを開け、なければ「カギがかかっている」と2秒出す |
ドアの開け閉めは、サーバーで動くこのScriptだけで決めます。
9. テストで自動ドアを確かめる
3D画面の上の作品のタブ「Place4」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。水色の自動ドアに歩いて近づくと、ドアが左へスライドして開きます(赤い枠)。ドアから離れると、また閉まります。
画像は、開いたすき間が見えるように、カメラを上から写しています。アバターがすき間を通り抜けています。右上の名前の欄はモザイクにしています。

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

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

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

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

| 試したこと | 結果 |
|---|---|
| 水色のドアに近づく | 左へスライドして開き、離れると閉まった |
| カギなしで赤いドアのEを押す | 「カギがかかっている」と出て、開かなかった |
| 黄色いカギに触れる | 拾って手に持ち、下に「Key」が出た |
| カギを持って赤いドアのEを押す | 右へスライドして開いた |
数字を変えて調整する
| 変えたいこと | 変える場所 | 例 |
|---|---|---|
| 自動ドアが開く距離 | OPEN_DISTANCE | 10 → 6にすると、ドアのすぐ前まで来ないと開かない |
| ドアが動く長さ | SLIDE | ドアの幅と同じ6にすると、すき間が全部あく |
| 開くときの速さ | TweenInfo.newの最初の数 | 0.6 → 1.5にすると、ゆっくり開く |
ドアの幅を変えたら、SLIDEも同じ数にします。SLIDEがドアの幅より小さいと、開いてもすき間の一部がふさがったままになります。
ドアが開かないときの確かめ方
| 症状 | 見るところ | 直し方 |
|---|---|---|
| どちらのドアも動かない | DoorService | ServerScriptServiceの中にあるか、RunContextが「Server」か。出力に赤い文字が出ていないか |
| 出力に「Infinite yield possible」と出る | 名前 | Workspaceの中のフォルダーの名前が「Doors」か。ドアの名前が「AutoDoor」「KeyDoor」か。この表示の読み方はInfinite yield possibleの直し方で解説しています |
| カギを持っているのに開かない | Toolの名前 | Toolの名前が半角の「Key」か |
| カギが拾えない | Handle | Toolの中のパーツの名前が「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)のショップの作り方
- ボタンで上下に動く床を作りたい → ロブロックス(Roblox)スタジオでエレベーターを作る方法
- 拾って持てる道具をくわしく知りたい → ロブロックス(Roblox)スタジオで手に持てるアイテムを作る方法
- 近づくと押せるボタンを知りたい → ロブロックス(Roblox)スタジオでNPCを作る方法