「オビーに回る床や動く床を入れたい」「動く床を作ったのに、乗ると置いていかれる」
ロブロックス(Roblox)で回る床と動く床を作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。ここでは、ぐるぐる回る青い床と、行ったり来たりする緑の床を作り、乗ったまま運ばれるかをテストで確かめます。比べるために、別の方法で動かした床にも乗ってみました。
パーツの向きを変えたいだけなら、Roblox Studioの使い方の「回転」で解説しています。
中級ステップ6/28 前の記事:ロブロックス(Roblox)の開発者製品の作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。フォルダーやパーツ、スクリプトの入れ方はオビーの作り方で画像付きで解説しています。
今回の完成状態:下の画像のように、青い床に乗ったアバターが、操作しなくても床と一緒に回れば成功です。

動く床の作り方は2種類ある
床を動かす方法は、大きく分けて2つあります。どちらで動かすかで、乗った人が一緒に運ばれるかが変わります。
| 動かし方 | 床の「固定」 | 乗った人 | 向いているもの |
|---|---|---|---|
| つなぎ目(Constraint)で物理で動かす | 外す | 一緒に運ばれる | 乗る床、エレベーター |
| Tween(トゥイーン)などで位置を書きかえる | 付けたまま | 置いていかれる | 乗らない飾り、見せるだけの仕掛け |
ここでは、乗る床に向いている1つめの方法で作ります。2つめの方法は、最後に比べるために試します。
1. 床を入れるフォルダーを作る
新しいBaseplateを開き、エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します。
出てきた一覧の検索欄に「Folder」と入力し、一覧の「Folder」(赤い枠)を押します。

エクスプローラで入った「Folder」を選んだ状態でF2キーを押し、名前を「Floors」に変えます。
2. 土台と床のパーツを4つ置く
エクスプローラの「Floors」にマウスを乗せて、右に出る「+」(赤い枠)を押します。

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

ここから、回る床の土台・回る床・動く床の土台・動く床の4つを、1つずつ作っていきます。
SpinBase(回る床の土台)
- エクスプローラの「Floors」の中にできた「Part」を選んだ状態でF2キーを押し、名前を「SpinBase」に変えます。
- SpinBaseを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「4, 1, 4」にしてEnterキーを押します。
- 続けてSpinBaseを選んだまま、プロパティの検索欄を「Position」に書き換えます。Positionは検索するといくつか出てくるので、「▼CFrame」のすぐ下にあるPositionを「0, 1, 30」にしてEnterキーを押します。
- 色は最初から「Medium stone grey(灰色)」なので変えません。
SpinFloor(回る床)
- エクスプローラの「Floors」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
- エクスプローラの「Floors」の中に新しくできた「Part」を選んだ状態でF2キーを押し、名前を「SpinFloor」に変えます。
- SpinFloorを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「14, 1, 14」にしてEnterキーを押します。
- 続けてSpinFloorを選んだまま、プロパティの検索欄を「Position」に書き換え、「▼CFrame」のすぐ下にあるPositionを「0, 2.5, 30」にしてEnterキーを押します。
- 続けてSpinFloorを選んだまま、プロパティの検索欄を「Color」に書き換えます。BrickColorとColorの2つの欄が並ぶので、下のColorの欄の数字を「13, 105, 172」に書き換えてEnterキーを押します。床が青くなり、上のBrickColorの欄も「Bright blue」に変わります。
MoveBase(動く床の土台)
- エクスプローラの「Floors」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
- エクスプローラの「Floors」の中に新しくできた「Part」を選んだ状態でF2キーを押し、名前を「MoveBase」に変えます。
- MoveBaseを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「4, 1, 4」にしてEnterキーを押します。
- 続けてMoveBaseを選んだまま、プロパティの検索欄を「Position」に書き換え、「▼CFrame」のすぐ下にあるPositionを「30, 1, 30」にしてEnterキーを押します。
- 色は最初から「Medium stone grey(灰色)」なので変えません。
MoveFloor(行ったり来たりする床)
- エクスプローラの「Floors」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
- エクスプローラの「Floors」の中に新しくできた「Part」を選んだ状態でF2キーを押し、名前を「MoveFloor」に変えます。
- MoveFloorを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「8, 1, 8」にしてEnterキーを押します。
- 続けてMoveFloorを選んだまま、プロパティの検索欄を「Position」に書き換え、「▼CFrame」のすぐ下にあるPositionを「30, 2.5, 30」にしてEnterキーを押します。
- 続けてMoveFloorを選んだまま、プロパティの検索欄を「Color」に書き換え、下のColorの欄の数字を「75, 151, 75」に書き換えてEnterキーを押します。床が緑になり、上のBrickColorの欄も「Bright green」に変わります。
4つのパーツを確かめる
4つとも入れ終わったら、SpinFloorを例に値が入っているか確かめます。エクスプローラの「Floors」の中には、4つのパーツが並んでいます(画像の1)。エクスプローラでSpinFloorを選んだ状態で、プロパティの検索欄に「Size」と入力すると、Sizeの欄が「14, 1, 14」になっています(画像の2)。

SpinFloorを選んだまま、プロパティの検索欄を「Position」に書き換えると、「▼CFrame」のすぐ下のPositionが「0, 2.5, 30」になっています(赤い枠)。

SpinFloorを選んだまま、プロパティの検索欄を「Color」に書き換えると、BrickColorが「Bright blue」、Colorが「13, 105, 172」になっています(赤い枠)。

見直し用に、4つのパーツの値を表にまとめます。
| 名前 | Size | Position(▼CFrameのすぐ下) | 色 | 役目 |
|---|---|---|---|---|
| SpinBase | 4, 1, 4 | 0, 1, 30 | 最初の Medium stone grey(灰色)のまま | 回る床の土台 |
| SpinFloor | 14, 1, 14 | 0, 2.5, 30 | Color 13, 105, 172(Bright blue(青)) | 回る床 |
| MoveBase | 4, 1, 4 | 30, 1, 30 | 最初の Medium stone grey(灰色)のまま | 動く床の土台 |
| MoveFloor | 8, 1, 8 | 30, 2.5, 30 | Color 75, 151, 75(Bright green(緑)) | 行ったり来たりする床 |
土台の上の面(高さ1.5)と床の下の面(高さ2)のあいだに、0.5スタッドのすき間を空けています。床が土台にこすれると、うまく回らなくなるからです。
最後に、4つのパーツをまとめて選びます。エクスプローラでMoveBaseを押し、Shiftキーを押したままSpinFloorを押すと、4つとも青くなります(赤い枠)。

この状態で、3D画面上部メニューの「ホーム」タブの右のほうにある「固定」(赤い枠)を押し、すべて固定します。床も固定しておくのは、テストが始まった瞬間に床が落ちないようにするためです。床の固定は、このあとのスクリプトが外します。

3. 床を動かすスクリプトを入れる
エクスプローラの「ServerScriptService」にマウスを乗せて「+」を押します(赤い枠)。

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

エクスプローラで入った「Script」を選んだ状態でF2キーを押し、名前を「MovingFloors」に変えます。
MovingFloorsを選んだまま、プロパティの検索欄に「RunContext」と入力し、「▼動作」の欄にあるRunContextの一覧から「Server」を選びます(赤い枠)。RunContextは、スクリプトをどこで動かすかを決める設定で、「Server」はゲームのサーバー側で動かす設定です。

中身を全部消して、次のコードを貼り付けます。
-- 回る床と、行ったり来たりする床を動かすスクリプト
-- ServerScriptService に入れる
local SPIN_SPEED = 1 -- 回る速さ(1秒に1ラジアン。1周は約6.28なので、約6秒で1周)
local MOVE_DISTANCE = 20 -- 往復する長さ(スタッド)
local MOVE_SPEED = 6 -- 往復の速さ(1秒に何スタッド進むか)
local STOP_TIME = 2 -- 端で止まっている秒数
local floors = workspace:WaitForChild("Floors")
-- 土台(base)と床(floor)を、床の真ん中でつなぐ Attachment を2つ作る
-- turn は「つなぎ目の向き」。黄色い矢印(X軸)が回る軸・動く向きになる
local function connect(base, floor, turn)
local floorAttachment = Instance.new("Attachment")
floorAttachment.CFrame = turn
floorAttachment.Parent = floor
local baseAttachment = Instance.new("Attachment")
baseAttachment.CFrame = base.CFrame:ToObjectSpace(floor.CFrame * turn)
baseAttachment.Parent = base
return baseAttachment, floorAttachment
end
-- 1. 回る床:HingeConstraint をモーターにする
local spinBase = floors:WaitForChild("SpinBase")
local spinFloor = floors:WaitForChild("SpinFloor")
-- 黄色い矢印を真上に向ける(Z軸のまわりに90度回す)
local a0, a1 = connect(spinBase, spinFloor, CFrame.Angles(0, 0, math.rad(90)))
local hinge = Instance.new("HingeConstraint")
hinge.Attachment0 = a0
hinge.Attachment1 = a1
hinge.ActuatorType = Enum.ActuatorType.Motor
hinge.AngularVelocity = SPIN_SPEED
hinge.MotorMaxTorque = 1000000 -- 人が乗っても止まらないよう大きめにする
hinge.Parent = spinFloor
-- 2. 往復する床:PrismaticConstraint をサーボにする
local moveBase = floors:WaitForChild("MoveBase")
local moveFloor = floors:WaitForChild("MoveFloor")
-- 黄色い矢印は最初から横(X軸)向きなので、向きは変えない
local b0, b1 = connect(moveBase, moveFloor, CFrame.identity)
local slider = Instance.new("PrismaticConstraint")
slider.Attachment0 = b0
slider.Attachment1 = b1
slider.ActuatorType = Enum.ActuatorType.Servo
slider.Speed = MOVE_SPEED
slider.ServoMaxForce = 1000000
slider.TargetPosition = 0
slider.Parent = moveFloor
-- つなぎ終わったので、床の固定を外して物理で動かす
spinFloor.Anchored = false
moveFloor.Anchored = false
-- 端まで行ったら少し止まって戻る、をくり返す
local moveTime = MOVE_DISTANCE / MOVE_SPEED
while true do
slider.TargetPosition = MOVE_DISTANCE
task.wait(moveTime + STOP_TIME)
slider.TargetPosition = 0
task.wait(moveTime + STOP_TIME)
end

このコードは、土台と床を「つなぎ目」でつないでから、床の固定を外しています。
| 部品 | していること |
|---|---|
| Attachment(アタッチメント) | つなぎ目の位置と向きの目印。土台と床に1つずつ作る |
| HingeConstraint(ヒンジ) | ドアのちょうつがいのように、1本の軸のまわりに回す。「Motor」にすると自分で回り続ける |
| PrismaticConstraint(プリズマティック) | 1本の線の上をすべらせる。「Servo」にすると、TargetPositionの位置まで動いて止まる |
| MotorMaxTorque・ServoMaxForce | 回す力・押す力の上限。小さいと、人が乗ったときに止まってしまう |
TargetPositionを「20」と「0」に交互に変えると、床はコードのMOVE_DISTANCEで決めた20スタッドを進んでは戻る動きをくり返します。
4. テストで、乗ったまま運ばれるか確かめる
3D画面の上の作品のタブ「Place5」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。エクスプローラを開くと、床の中に、スクリプトが作った「HingeConstraint」(画像の2)と「PrismaticConstraint」(画像の1)が入っていました。

W・A・S・Dキーで青い床のそばまで歩き、Spaceキーでジャンプして床に乗ります。乗ったら、何も操作せずに待ちます。下の2枚は、乗った直後と少したってからの画面です。床が回って、アバター(赤い枠)も床と一緒に向きと位置が変わりました。


位置の数字でも確かめられます。テスト中に、エクスプローラの「Workspace」の中にある自分のアバター(アカウント名の付いたモデル)の左の三角を押して開き、「HumanoidRootPart」を選びます。プロパティの検索欄に「Position」と入れると、アバターの今の位置が出ます。床に乗ったまま見ていると、XとZの数字が床と一緒に変わっていきます。
以下は、アソビシフト編集部が青い床に乗って確かめた結果です。1.5秒のあいだに、アバターの位置が(X 0.4、Z 34.1)から(X 4.2、Z 29.7)に変わりました。床の真ん中(X 0、Z 30)のまわりを床と一緒に回っています。
次に、W・A・S・Dキーで緑の床のそばまで歩き、Spaceキーでジャンプして乗ります。床は右へ20スタッド進んでは戻ります。上と同じように「HumanoidRootPart」の「Position」を見ていると、床が進むのに合わせてアバターのXの数字も増えていきます。乗ったアバターが床と一緒に運ばれています。
下の画像は、編集部が確かめるために、床の位置(floorX)とアバターの位置(avatarX)を約1.2秒ごとに出力に出したものです。どちらもほぼ同じ数で動いていました(赤い枠)。

この数を出すコードは記事の手順に入れていないので、手順どおりに作ったときの出力には出ません。自分で確かめるときは、HumanoidRootPartのPositionを見てください。
比べてみる:Tweenで動かした床に乗ると
Shift + F5キーでテストを停止します。
比べるために、もう1つ床を作ります。エクスプローラの「Floors」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
エクスプローラの「Floors」の中に新しくできた「Part」を選んだ状態でF2キーを押し、名前を「TweenFloor」に変えます。
TweenFloorを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「8, 1, 8」にしてEnterキーを押します(赤い枠)。

続けてTweenFloorを選んだまま、プロパティの検索欄を「Position」に書き換え、「▼CFrame」のすぐ下にあるPositionを「30, 2.5, 60」にしてEnterキーを押します(赤い枠)。

続けてTweenFloorを選んだまま、プロパティの検索欄を「Color」に書き換え、下のColorの欄の数字を「226, 155, 64」に書き換えてEnterキーを押します。床がオレンジになり、上のBrickColorの欄が「Br. yellowish orange」に変わります(赤い枠)。

続けてTweenFloorを選んだまま、プロパティの検索欄を「Anchored」に書き換え、Anchoredのチェックを入れて固定します(赤い枠)。Anchoredは、ホームタブの「固定」と同じ設定です。この床は固定したまま動かします。

次に、エクスプローラの「ServerScriptService」にマウスを乗せて「+」を押し、検索欄に「Script」と入力して、一覧の「Script」を押します。
エクスプローラで入った「Script」を選んだ状態でF2キーを押し、名前を「TweenFloorTest」に変えます。
TweenFloorTestを選んだまま、プロパティの検索欄に「RunContext」と入力し、RunContextの一覧から「Server」を選びます。
TweenFloorTestの画面で、中身を全部消して、次のコードを貼り付けます。TweenService(トゥイーンサービス)を使って、床を20スタッド往復させるコードです。
-- 固定した床を Tween で往復させる(比べるための例)
local TweenService = game:GetService("TweenService")
local floor = workspace:WaitForChild("Floors"):WaitForChild("TweenFloor")
-- 3秒かけて進み、同じ時間で戻る。-1 でずっとくり返す
local info = TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
local tween = TweenService:Create(floor, info, { CFrame = floor.CFrame + Vector3.new(20, 0, 0) })
tween:Play()
貼り付けると、エクスプローラのServerScriptServiceの中に「TweenFloorTest」があり(画像の1)、画面に貼り付けたコードが出ています(画像の2)。

3D画面の上の作品のタブ「Place5」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。W・A・S・Dキーでオレンジの床のそばまで歩き、Spaceキーでジャンプして乗ります。床だけが動いてアバターは置いていかれ、床から落ちて地面に立っていました(画像の1)。画像の出力は、編集部が床の位置(tweenX)とアバターの位置(avatarX)を確かめるために出したものです。床が32.8から49.1へ動くあいだ、アバターは54.9のまま動いていません(画像の2)。自分で確かめるときはHumanoidRootPartのPositionを見て、床が動いてもアバターのXの数字が床と一緒に増えないことを確かめてください。

| 試した床 | 床の動かし方 | 乗ったアバター |
|---|---|---|
| 青い床(SpinFloor) | HingeConstraintのモーター | 床と一緒に回った |
| 緑の床(MoveFloor) | PrismaticConstraintのサーボ | 床と一緒に運ばれた |
| オレンジの床(TweenFloor) | 固定したままTweenで位置を書きかえ | 置いていかれて落ちた |
Tweenは、乗らない飾りや、扉がすっと開くような見せる仕掛けに向いています。人を乗せて運ぶ床は、固定を外してConstraintで動かします。
床がうまく動かないときの直し方
| 症状 | 原因 | 直し方 |
|---|---|---|
| テストを始めると床が落ちる | つなぐ前に床の固定が外れている | Studioでは床も固定しておき、スクリプトで外す |
| 床が回らない・動かない | 床が土台にこすれている | 床と土台のあいだにすき間を空ける |
| 床が縦に回る | Attachmentの向きがずれている | 回る床は、つなぎ目をZ軸のまわりに90度回して、軸を真上に向ける |
| 人が乗ると止まる | 力の上限が小さい | MotorMaxTorque・ServoMaxForceを大きくする |
| 床が土台ごと動いてしまう | 土台の固定が外れている | 土台(SpinBase・MoveBase)は固定したままにする |
スクリプトが動いているか分からないときは、スクリプトが動かないときの確認手順で出力の見方を確かめてください。
AIに相談するときの伝え方
AIに動く床を頼むときは、乗る床かどうかと、使う部品を指定します。
Roblox Studioで、プレイヤーが乗ったまま運ばれる往復する床を作りたいです。
床は固定せず、土台とPrismaticConstraint(ActuatorTypeはServo)でつないで動かしてください。
BodyPositionなどの古い部品やTweenは使わないでください。
ServerScriptServiceのScriptで、往復する長さと速さ、端で止まる秒数を、最初の数行で変えられるようにしてください。
よくある質問
回る速さを変えるには?
エクスプローラのServerScriptServiceの中の「MovingFloors」をダブルクリックして開き、コードの4行目のSPIN_SPEEDの数字を変えます。1は「1秒に約57度」で、約6秒で1周します。2にすると約3秒で1周になります。
回る角度に限りをつけたい(ちょうつがいのドアなど)
HingeConstraintは、回る角度に限りをつけることもできます。Robloxの公式の説明によると、角度の限りは決まった範囲だけ開け閉めするドアのような仕組みに向いています。LimitsEnabledをオンにすると、LowerAngleとUpperAngle(単位は度)で回る範囲を決められます。この記事の回る床のようにモーター(Motor)で回し続けるときは限りはつけません。
往復する長さや止まる時間を変えるには?
エクスプローラのServerScriptServiceの中の「MovingFloors」をダブルクリックして開き、コードの5〜7行目の数字を変えます。MOVE_DISTANCEが往復する長さ(スタッド)、MOVE_SPEEDが1秒に進む長さ、STOP_TIMEが端で止まる秒数です。
次は、乗ると消える床と、時間内だけ渡れる橋を作ります。次のステップ(中級 7/28)
次に知りたいことを選ぶ
- 次のステップ:乗ると消える床と、時間内だけ渡れる橋を作ります → ロブロックス(Roblox)スタジオで消える床を作る方法
- 動く床を入れたコースを作りたい → ロブロックス(Roblox)でオビーを作る方法
- 落ちても途中から戻れるようにしたい → ロブロックス(Roblox)のチェックポイントの作り方
- パーツの回し方・動かし方の基本を知りたい → Roblox Studioの使い方