「ロブロックスで電車を作りたいけど、線路から外れたり、動かなかったりする」「配布の電車ではなく、自分で作ってみたい」
ロブロックス(Roblox)スタジオで、線路から外れない電車の作り方を、実際の画像付きで誰でも簡単に分かるように解説します。配布モデルは使わず、「+」で入れた部品だけで、線路・運転席・2両目の連結・駅のホーム・踏切まで作ります。
上級ステップ17/40 前の記事:ロブロックス(Roblox)のモジュールスクリプト(ModuleScript)の使い方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。座って運転する仕組み(VehicleSeat)は車の作り方、部品を動かす仕組み(コンストレイント)はエレベーターの作り方でも解説しています。
先に答え
| 知りたいこと | 答え |
|---|---|
| 線路から外れない電車は? | 線路と車体を PrismaticConstraint(決まった1本の向きにだけすべらせる部品)でつなぐ。車体は線路に沿ってしか動かない |
| どうやって運転する? | 運転席の VehicleSeat に座ってWキー・Sキー。スクリプトが PrismaticConstraint の速さを少しずつ変える |
| 連結は? | 2両目も線路とつなぎ、1両目と RodConstraint(長さの決まった棒)でつなぐ |
| 踏切は? | 遮断機の棒を HingeConstraint(回す部品)で柱に付け、電車が近づいたらスクリプトで下ろす |
今回の完成状態:運転席に座ってWキーを押すと電車が走ります。下の画像のように踏切に近づくと遮断機が下り、駅のホームの横で止まれば成功です。

作るものと流れ
| 名前 | 種類 | 置く場所 | 役目 |
|---|---|---|---|
| Ballast | Part | Workspace | 線路の土台(砂利)。電車をつなぐ印(TrackAttachment)を入れる |
| RailL・RailR | Part | Workspace | 左右のレール(見た目) |
| Train | Model | Workspace | 電車をまとめる入れ物 |
| Body | Part | Trainの中 | 1両目の車体。線路とつなぐTrackSliderを入れる |
| DriverSeat | VehicleSeat | Trainの中 | 運転席。座るとWキー・Sキーで運転できる |
| TrainScript | Script | Trainの中 | 運転席の操作で電車の速さを変える |
| Car2 | Part | Trainの中 | 2両目。BodyとCouplerでつなぐ |
| Platform | Part | Workspace | 駅のホーム |
| Crossing | Model | Workspace | 踏切(道路・柱・遮断機・ランプ・CrossingScript) |
1. 線路を作る
線路の土台(Ballast)
新しいBaseplateを開きます。エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

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

続けてBallastを選んだまま、次の5つのプロパティを1つずつ変えます。
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 200, 1, 10 | 長さ200スタッドの線路の土台にする |
| Position(▼CFrameのすぐ下) | 0, 0.5, -20 | スタートの台の前に、地面に乗せて置く |
| Color | 110, 100, 90 | 砂利の色にする |
| Material | Slate(一覧から選ぶ) | ざらざらした石に見せる |
| Anchored | チェックを入れる | 線路が動かないように固定する |
- プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「200, 1, 10」と入れてEnterキーを押します(下の1枚目)
- 検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「0, 0.5, -20」と入れてEnterキーを押します(下の2枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「110, 100, 90」と入れ、Enterキーを押します(下の3枚目)
- 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Slate」を押します(下の4枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の5枚目)
左のレール(RailL)
「+」から部品を入れる操作は、Ballastのときと同じです。
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 200, 0.6, 0.6 | 線路と同じ長さの細い棒にする |
| Position(▼CFrameのすぐ下) | 0, 1.3, -22 | 土台の上の、奥の側に置く |
| Color | 150, 150, 150 | 灰色にする |
| Material | Metal(一覧から選ぶ) | 金属に見せる |
| Anchored | チェックを入れる | 固定する |
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します
- エクスプローラでPartを選んだままF2キーを押し、名前を「RailL」に変えます(下の1枚目)
- RailLを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「200, 0.6, 0.6」と入れてEnterキーを押します(下の2枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「0, 1.3, -22」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「150, 150, 150」と入れ、Enterキーを押します(下の4枚目)
- 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Metal」を押します(下の5枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)
右のレール(RailR)
右のレールは、RailLを複製して作ります。変えるのは次の2つです。
| 変える所 | 値 |
|---|---|
| 名前 | RailR |
| Position(▼CFrameのすぐ下) | 0, 1.3, -18 |
- エクスプローラで「RailL」を押して選び、Ctrl + Dキーを押します。同じ場所に複製ができ、複製したほうが選ばれた状態になります
- エクスプローラでそのままF2キーを押し、名前を「RailR」に変えます(下の1枚目)
- RailRを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「0, 1.3, -18」と入れてEnterキーを押します(下の2枚目)
電車をつなぐ印(TrackAttachment)
電車を線路につなぐための印(Attachment)を、Ballastの中に入れます。
- エクスプローラの「Ballast」にマウスを乗せて「+」を押し、一覧の検索欄に「Attachment」と入れて「Attachment」を押します(下の1枚目)
- エクスプローラでAttachmentを選んだままF2キーを押し、名前を「TrackAttachment」に変えます(下の2枚目)
- TrackAttachmentを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「0, 2.5, 0」と入れてEnterキーを押します(下の3枚目)
2. 電車の車体と運転席を作る
電車の入れ物(Train)
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Model」と入れて「Model」を押します(下の1枚目)
- エクスプローラでModelを選んだままF2キーを押し、名前を「Train」に変えます(下の2枚目)
1両目の車体(Body)
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 16, 1, 7 | 長さ16スタッドの車体にする |
| Position(▼CFrameのすぐ下) | -12, 3, -20 | 線路の上に浮かべる |
| Color | 40, 120, 60 | 緑色にする |
| Anchored | チェックを外したまま | 固定すると動かない(「+」で入れたときは外れている) |
- エクスプローラの「Train」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「Body」に変えます(下の2枚目)
- Bodyを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「16, 1, 7」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「-12, 3, -20」と入れてEnterキーを押します(下の4枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「40, 120, 60」と入れ、Enterキーを押します(下の5枚目)
- 検索欄に「Anchored」と入れ、チェックが外れていることを確かめます(下の6枚目)
運転席(DriverSeat)
| プロパティ | 値 | 理由 |
|---|---|---|
| Orientation(▼CFrameのすぐ下) | 0, -90, 0 | 座った人が、電車の進む向きを向くようにする |
| Position(▼CFrameのすぐ下) | -6, 4, -20 | 車体の前のほうに乗せる |
- エクスプローラの「Train」にマウスを乗せて「+」を押し、一覧の検索欄に「VehicleSeat」と入れて「VehicleSeat」を押します(下の1枚目)
- エクスプローラでVehicleSeatを選んだままF2キーを押し、名前を「DriverSeat」に変えます(下の2枚目)
- DriverSeatを選んだまま、プロパティの検索欄に「Orientation」と入れ、「▼CFrame」のすぐ下のOrientationに「0, -90, 0」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「-6, 4, -20」と入れてEnterキーを押します(下の4枚目)
運転席を車体にくっつける(WeldConstraint)
- エクスプローラの「DriverSeat」にマウスを乗せて「+」を押し、一覧の検索欄に「WeldConstraint」と入れて「WeldConstraint」を押します(下の1枚目)
- エクスプローラでWeldConstraintを選んだまま、プロパティの検索欄に「Part0」と入れます。右の空の欄を押してから、エクスプローラの「DriverSeat」を押します(下の2枚目)
- 検索欄に「Part1」と入れ、右の空の欄を押してから、エクスプローラの「Body」を押します(下の3枚目)
3. 線路に沿ってだけ動くようにする
ここが脱線しない電車のいちばん大事な所です。Bodyに印(SlideAttachment)を入れ、線路の印(TrackAttachment)とPrismaticConstraintでつなぎます。PrismaticConstraintは、つないだ2つの印を決まった1本の向きにだけすべらせ、回らないようにする部品です(Robloxの公式の説明に書かれている働きです)。
車体の印(SlideAttachment)
- エクスプローラの「Body」にマウスを乗せて「+」を押し、一覧の検索欄に「Attachment」と入れて「Attachment」を押します(下の1枚目)
- エクスプローラでAttachmentを選んだままF2キーを押し、名前を「SlideAttachment」に変えます(下の2枚目)。Positionは「0, 0, 0」のまま変えません
線路とつなぐ(TrackSlider)
| プロパティ | 値 | 理由 |
|---|---|---|
| Attachment0 | TrackAttachment | 線路の印 |
| Attachment1 | SlideAttachment | 車体の印 |
| ActuatorType | Motor(一覧から選ぶ) | スクリプトで決めた速さで動かす |
| MotorMaxForce | 1000000 | 電車を動かす力の上限。0だと動かない(8節) |
| LimitsEnabled | チェックを入れる | 動ける範囲を決める |
| LowerLimit | -90 | 線路の左のはしの近くで止める |
| UpperLimit | 90 | 線路の右のはし(駅)で止める |
- エクスプローラの「Body」にマウスを乗せて「+」を押し、一覧の検索欄に「PrismaticConstraint」と入れて「PrismaticConstraint」を押します(下の1枚目)
- エクスプローラでPrismaticConstraintを選んだままF2キーを押し、名前を「TrackSlider」に変えます(下の2枚目)
- TrackSliderを選んだまま、プロパティの検索欄に「Attachment」と入れます。Attachment0の右の空の欄を押してから、エクスプローラで「Ballast」の左の「▶」を押して開き、中の「TrackAttachment」を押します(下の3枚目)
- Attachment1の右の空の欄を押してから、エクスプローラのBodyの中の「SlideAttachment」を押します(下の4枚目)
- 検索欄に「ActuatorType」と入れ、右の「None」を押して開く一覧から「Motor」を押します(下の5枚目)
- 検索欄に「MotorMaxForce」と入れ、右の欄に「1000000」と入れてEnterキーを押します(下の6枚目)
- 検索欄に「LimitsEnabled」と入れ、右の四角を押してチェックを入れます(下の7枚目)
- 検索欄に「Limit」と入れ、LowerLimitに「-90」と入れてEnterキーを押します(下の8枚目)
- 続けてUpperLimitに「90」と入れてEnterキーを押します(下の9枚目)
4. 運転のスクリプトを入れて走らせる
TrainScript
- エクスプローラの「Train」にマウスを乗せて「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します(下の1枚目)
- エクスプローラでScriptを選んだままF2キーを押し、名前を「TrainScript」に変えます(下の2枚目)
3D画面の上のタブ「TrainScript」を押して、スクリプトの画面を出します。中身を全部消して、次のコードを貼り付けます(コードの画面の中を押してからCtrl + Aキーで全部選び、Deleteキーで消します)。
local RunService = game:GetService("RunService")
local train = script.Parent
local seat = train:WaitForChild("DriverSeat")
local slider = train:WaitForChild("Body"):WaitForChild("TrackSlider")
local MAX_SPEED = 30 -- いちばん速いときの速さ(1秒に進むスタッド)
local ACCEL = 10 -- 1秒ごとに速さが変わる量(大きいほど、すぐ速くなる)
local speed = 0
RunService.Heartbeat:Connect(function(dt)
-- W で 1、S で -1、何も押さないと 0
local target = seat.ThrottleFloat * MAX_SPEED
if speed < target then
speed = math.min(speed + ACCEL * dt, target)
elseif speed > target then
speed = math.max(speed - ACCEL * dt, target)
end
slider.Velocity = speed
end)

| コードの部分 | していること |
|---|---|
seat.ThrottleFloat | 運転席で前に進む操作をすると1、後ろに進む操作で-1、何もしないと0に戻る数(-1から1までの数。Robloxの公式の説明による値です) |
MAX_SPEED | いちばん速いときの速さ。MAX_SPEEDで決めた30は、1秒に30スタッド進む速さ |
ACCEL | 1秒ごとに速さが変わる量。ACCELで決めた10なら、止まった状態から3秒で30になる |
speed と target | 今の速さ(speed)を、目ざす速さ(target)に少しずつ近づける。急に止まったり急に走り出したりしない |
slider.Velocity = speed | TrackSliderの速さを変える。ActuatorTypeがMotorのとき、この速さで線路に沿って動く |
RunService.Heartbeat | 1秒に何十回も、くり返し中の処理を行う。dt は前の回からの時間(秒) |
テストで運転する
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。テストを始めてスタートの台から左前の運転席のほうへ歩き、運転席に触れると座れます。座ると、画面の下に「速度」の表示が出ます(赤い枠)。

以下は、アソビシフト編集部がWキーを押し続けて確かめた結果です。速度は9、18と少しずつ上がり、30より上には上がりませんでした。Sキーを押し続けると、遅くなって止まったあと、後ろへ走り出しました。
確かめ終わったら、Shift + F5キーでテストを停止します。
5. 2両目を連結する
2両目(Car2)
2両目は、Bodyを複製して作ります。中のSlideAttachmentとTrackSliderも一緒に複製されます。
| 変える所 | 値 | 理由 |
|---|---|---|
| 名前 | Car2 | 2両目 |
| Position(▼CFrameのすぐ下) | -30, 3, -20 | 1両目のうしろに置く |
| Car2の中のTrackSliderのActuatorType | None(一覧から選ぶ) | 2両目は自分では走らず、引っぱられて動く |
- エクスプローラで「Body」を押して選び、Ctrl + Dキーを押します。複製したほうが選ばれた状態になります
- エクスプローラでそのままF2キーを押し、名前を「Car2」に変えます(下の1枚目)
- Car2を選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「-30, 3, -20」と入れてEnterキーを押します(下の2枚目)
- エクスプローラでCar2の左の「▶」を押して開き、中の「TrackSlider」を押して選びます。プロパティの検索欄に「ActuatorType」と入れ、右の「Motor」を押して開く一覧から「None」を押します(下の3枚目)
- Car2の中のTrackSliderを選んだまま、プロパティの検索欄に「Attachment」と入れ、Attachment0がTrackAttachment、Attachment1がSlideAttachmentになっていることを確かめます(下の4枚目)
つなぐ印(CouplerBack・CouplerFront)
- エクスプローラの「Body」にマウスを乗せて「+」を押し、一覧の検索欄に「Attachment」と入れて「Attachment」を押します(下の1枚目)
- エクスプローラでAttachmentを選んだままF2キーを押し、名前を「CouplerBack」に変えます(下の2枚目)
- CouplerBackを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「-8, 0, 0」と入れてEnterキーを押します(下の3枚目)。印が1両目のうしろのはしに動きます
- エクスプローラの「Car2」にマウスを乗せて「+」を押し、一覧の検索欄に「Attachment」と入れて「Attachment」を押します(下の4枚目)
- エクスプローラでAttachmentを選んだままF2キーを押し、名前を「CouplerFront」に変えます(下の5枚目)
- CouplerFrontを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「8, 0, 0」と入れてEnterキーを押します(下の6枚目)。印が2両目の前のはしに動きます
連結の棒(Coupler)
| プロパティ | 値 | 理由 |
|---|---|---|
| Attachment0 | CouplerBack | 1両目のうしろ |
| Attachment1 | CouplerFront | 2両目の前 |
| Length | 2 | 2つの車体のあいだを2スタッドに保つ |
| Visible | チェックを入れる | 棒が見えるようにする |
| Thickness | 0.4 | 棒を太くして見やすくする |
- エクスプローラの「Body」にマウスを乗せて「+」を押し、一覧の検索欄に「RodConstraint」と入れて「RodConstraint」を押します(下の1枚目)
- エクスプローラでRodConstraintを選んだままF2キーを押し、名前を「Coupler」に変えます(下の2枚目)
- Couplerを選んだまま、プロパティの検索欄に「Attachment」と入れます。Attachment0の右の空の欄を押してから、エクスプローラのBodyの中の「CouplerBack」を押します(下の3枚目)
- Attachment1の右の空の欄を押してから、エクスプローラのCar2の中の「CouplerFront」を押します(下の4枚目)。Car2が閉じているときは、左の「▶」を押して開きます
- 検索欄に「Length」と入れ、右の欄に「2」と入れてEnterキーを押します(下の5枚目)。つないだ直後は5になっています
- 検索欄に「Visible」と入れ、右の四角を押してチェックを入れます(下の6枚目)
- 検索欄に「Thickness」と入れ、右の欄に「0.4」と入れてEnterキーを押します(下の7枚目)。2つの車体のあいだに棒が見えます
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。以下は、アソビシフト編集部が運転席に座ってWキーを押し、2両目が一緒に走るか確かめた結果です。2両目は1両目に引っぱられて一緒に走りました。テスト中は、編集のときに作品のタブ「Place1」があった場所(3D画面のすぐ上の左はし)に、「クライアント」と「サーバー」の2つのタブが並びます(赤い枠)。

走ったあとに「サーバー」のタブを押すと、運転席からの画面が、上から斜めに見下ろす画面に切りかわります。下の画像がその画面です。2つの車体は棒(赤い枠)でつながったまま進んでいます。運転の画面に戻るときは「クライアント」のタブを押します。

確かめ終わったら、Shift + F5キーでテストを停止します。
6. 駅のホームを作る
電車は、TrackSliderのUpperLimitで決めた90の所で止まります。そこにホームを置きます。
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 30, 3, 8 | 長さ30スタッドのホームにする |
| Position(▼CFrameのすぐ下) | 85, 1.5, -11 | 電車が止まる所の、線路の手前に置く |
| Color | 200, 200, 200 | 明るい灰色にする |
| Material | Concrete(一覧から選ぶ) | コンクリートに見せる |
| Anchored | チェックを入れる | 固定する |
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「Platform」に変えます(下の2枚目)
- Platformを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「30, 3, 8」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「85, 1.5, -11」と入れてEnterキーを押します(下の4枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「200, 200, 200」と入れ、Enterキーを押します(下の5枚目)
- 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Concrete」を押します(下の6枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の7枚目)
7. 踏切を作る
踏切の入れ物(Crossing)と道路(Road)
| 道路(Road)のプロパティ | 値 | 理由 |
|---|---|---|
| Size | 10, 0.2, 40 | 線路を横切る長い道路にする |
| Position(▼CFrameのすぐ下) | 30, 0.1, -20 | 線路のまん中より右に置く |
| Color | 60, 60, 60 | 濃い灰色にする |
| Anchored | チェックを入れる | 固定する |
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Model」と入れて「Model」を押します(下の1枚目)
- エクスプローラでModelを選んだままF2キーを押し、名前を「Crossing」に変えます(下の2枚目)
- エクスプローラの「Crossing」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の3枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「Road」に変えます(下の4枚目)
- Roadを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「10, 0.2, 40」と入れてEnterキーを押します(下の5枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「30, 0.1, -20」と入れてEnterキーを押します(下の6枚目)。線路を横切る道路になります
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「60, 60, 60」と入れ、Enterキーを押します(下の7枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の8枚目)
柱(Pole)
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 1, 8, 1 | 細長い柱にする |
| Position(▼CFrameのすぐ下) | 24, 4, -10 | 道路の左、線路の手前に立てる |
| Color | 240, 240, 240 | 白にする |
| Anchored | チェックを入れる | 固定する |
- エクスプローラの「Crossing」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「Pole」に変えます(下の2枚目)
- Poleを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「1, 8, 1」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「24, 4, -10」と入れてEnterキーを押します(下の4枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「240, 240, 240」と入れ、Enterキーを押します(下の5枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)
遮断機の棒(Bar)
遮断機の棒は回して動かすので、Anchoredのチェックは外したままにします。
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 12, 0.6, 0.6 | 道路の幅より長い棒にする |
| Position(▼CFrameのすぐ下) | 30, 7, -10 | 柱の右、道路の上に横に置く |
| Color | 240, 200, 0 | 黄色にする |
| CanCollide | チェックを外す | 電車や人がぶつからないようにする |
- エクスプローラの「Crossing」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「Bar」に変えます(下の2枚目)
- Barを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「12, 0.6, 0.6」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「30, 7, -10」と入れてEnterキーを押します(下の4枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「240, 200, 0」と入れ、Enterキーを押します(下の5枚目)
- 検索欄に「CanCollide」と入れ、2つ並ぶうちの上、名前がちょうど「CanCollide」の欄の右の四角を押してチェックを外します(下の6枚目)
赤いランプ(LightA・LightB)
| LightAのプロパティ | 値 | 理由 |
|---|---|---|
| Size | 1, 1, 0.4 | 小さな四角いランプにする |
| Position(▼CFrameのすぐ下) | 23.4, 6, -9.5 | 柱の手前の面の左に付ける |
| Color | 80, 0, 0 | 消えているときの暗い赤 |
| Material | Neon(一覧から選ぶ) | 光って見えるようにする |
| Anchored | チェックを入れる | 固定する |
LightBはLightAを複製して作り、名前を「LightB」、Positionを「24.6, 6, -9.5」に変えます。
- エクスプローラの「Crossing」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「LightA」に変えます(下の2枚目)
- LightAを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「1, 1, 0.4」と入れてEnterキーを押します(下の3枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「23.4, 6, -9.5」と入れてEnterキーを押します(下の4枚目)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「80, 0, 0」と入れ、Enterキーを押します(下の5枚目)
- 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Neon」を押します(下の6枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の7枚目)
- エクスプローラで「LightA」を押して選び、Ctrl + Dキーを押します。複製したほうが選ばれた状態になります
- エクスプローラでそのままF2キーを押し、名前を「LightB」に変えます(下の8枚目)
- LightBを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「24.6, 6, -9.5」と入れてEnterキーを押します(下の9枚目)。柱に2つのランプが並びます
遮断機を回す仕組み(GateHinge)
棒を柱にHingeConstraintでつなぎます。HingeConstraintは、つないだ2つの印を1本の軸のまわりに回す部品です(Robloxの公式の説明に書かれている働きです)。ActuatorTypeをServoにすると、TargetAngleで決めた角度まで回ります。
- エクスプローラの「Pole」にマウスを乗せて「+」を押し、一覧の検索欄に「Attachment」と入れて「Attachment」を押します(下の1枚目)
- エクスプローラでAttachmentを選んだままF2キーを押し、名前を「HingeAttachment」に変えます(下の2枚目)
- HingeAttachmentを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「0, 3, 0」と入れてEnterキーを押します(下の3枚目)。柱の上のほうに印が動きます
- 検索欄に「Orientation」と入れ、「▼CFrame」のすぐ下のOrientationに「0, 90, 0」と入れてEnterキーを押します(下の4枚目)。回る軸を、道路と同じ向き(線路と直角の向き)にします。こうすると、横に長い棒が柱の所を支点に立ったり倒れたりします
- エクスプローラの「Bar」にマウスを乗せて「+」を押し、一覧の検索欄に「Attachment」と入れて「Attachment」を押します(下の5枚目)
- エクスプローラでAttachmentを選んだままF2キーを押し、名前を「HingeAttachment」に変えます(下の6枚目)
- Barの中のHingeAttachmentを選んだまま、プロパティの検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「-6, 0, 0」と入れてEnterキーを押します(下の7枚目)。棒の柱の側のはしに印が動きます
- 検索欄に「Orientation」と入れ、「▼CFrame」のすぐ下のOrientationに「0, 90, 0」と入れてEnterキーを押します(下の8枚目)。柱の印と同じ向きにそろえます
続けて、HingeConstraintを入れます。
| プロパティ | 値 | 理由 |
|---|---|---|
| Attachment0 | Poleの中のHingeAttachment | 柱の印 |
| Attachment1 | Barの中のHingeAttachment | 棒の印 |
| ActuatorType | Servo(一覧から選ぶ) | 決めた角度まで回す |
| ServoMaxTorque | 1000000 | 棒を回す力の上限 |
| AngularSpeed | 2 | 回る速さ |
| TargetAngle | -90 | 棒を立てる角度。テストを始めると棒が立つ |
- エクスプローラの「Bar」にマウスを乗せて「+」を押し、一覧の検索欄に「HingeConstraint」と入れて「HingeConstraint」を押します(下の1枚目)
- エクスプローラでHingeConstraintを選んだままF2キーを押し、名前を「GateHinge」に変えます(下の2枚目)
- GateHingeを選んだまま、プロパティの検索欄に「Attachment」と入れます。Attachment0の右の空の欄を押してから、エクスプローラで「Pole」の左の「▶」を押して開き、中の「HingeAttachment」を押します(下の3枚目)
- Attachment1の右の空の欄を押してから、エクスプローラのBarの中の「HingeAttachment」を押します(下の4枚目)
- 検索欄に「ActuatorType」と入れ、右の「None」を押して開く一覧から「Servo」を押します(下の5枚目)
- 検索欄に「ServoMaxTorque」と入れ、右の欄に「1000000」と入れてEnterキーを押します(下の6枚目)
- 検索欄に「AngularSpeed」と入れ、右の欄に「2」と入れてEnterキーを押します(下の7枚目)
- 検索欄に「TargetAngle」と入れ、右の欄に「-90」と入れてEnterキーを押します(下の8枚目)。編集の画面では棒は横のままで、テストを始めると立ちます
踏切のスクリプト(CrossingScript)
- エクスプローラの「Crossing」にマウスを乗せて「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します(下の1枚目)
- エクスプローラでScriptを選んだままF2キーを押し、名前を「CrossingScript」に変えます(下の2枚目)
3D画面の上のタブ「CrossingScript」を押して、スクリプトの画面を出します。中身を全部消して、次のコードを貼り付けます。
local crossing = script.Parent
local hinge = crossing:WaitForChild("Bar"):WaitForChild("GateHinge")
local lightA = crossing:WaitForChild("LightA")
local lightB = crossing:WaitForChild("LightB")
local road = crossing:WaitForChild("Road")
local trainBody = workspace:WaitForChild("Train"):WaitForChild("Body")
local NEAR = 35 -- 電車がこの距離(スタッド)より近いと、遮断機を下ろす
local ON = Color3.fromRGB(255, 0, 0) -- 光っているときの色
local OFF = Color3.fromRGB(80, 0, 0) -- 消えているときの色
local flip = false
while true do
-- 電車と道路の、線路に沿った向き(X)の距離
local distance = math.abs(trainBody.Position.X - road.Position.X)
if distance < NEAR then
hinge.TargetAngle = 0 -- 遮断機を下ろす
flip = not flip
lightA.Color = flip and ON or OFF
lightB.Color = flip and OFF or ON
else
hinge.TargetAngle = -90 -- 遮断機を上げる
lightA.Color = OFF
lightB.Color = OFF
end
task.wait(0.5)
end
コードが長く1つの画面に入りきらないので、コードの画面を下まで動かし、最後が task.wait(0.5) と end になっているかも確かめます(下の2枚目)。
| コードの部分 | していること |
|---|---|
NEAR | NEARで決めた35スタッドより電車が近いと、遮断機を下ろす |
trainBody.Position.X - road.Position.X | 電車の1両目と道路の、線路に沿った向きの距離。math.abs でマイナスを取る |
hinge.TargetAngle = 0 | 棒を横に倒して、遮断機を下ろす。-90 にすると立つ |
flip = not flip | 0.5秒ごとに、どちらのランプを光らせるかを入れかえる。2つが交互に点滅する |
task.wait(0.5) | 0.5秒待ってから、もう一度確かめる |
テストで踏切を通る
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。運転席に座ってWキーを押し続けます。以下は、アソビシフト編集部が試した結果です。
電車が踏切に近づくと、遮断機の棒が倒れ始めます(赤い枠)。1両目と道路の距離が、NEARで決めた35スタッドより短くなった所で倒れ始めます。電車は道路の42スタッド手前から走り出すので、走り出して少し進んだ所です。2つのランプは、0.5秒ごとにかわりばんこに赤く光ります。

下の画像は、電車が踏切を通るときに、5節と同じように「サーバー」のタブを押して見たものです。棒が横に下りて道路をふさぎ、ランプが赤く光っています(赤い枠)。

そのまま走ると、UpperLimitで決めた90の所で電車が止まり、ホームの横に着きます。Wキーを押していても速度の表示は0になります。

「サーバー」のタブを押すと、2両がホームの横に止まっているのが見えます。

確かめ終わったら、Shift + F5キーでテストを停止します。
8. 電車が動かないときに確かめる所
以下は、アソビシフト編集部がわざと設定を変えて、運転席に座ってWキーを押し続けたときの結果です。正しく作った電車は、同じ操作でホームの横まで進みました。この節は読むだけで大丈夫です。
| 変えた所 | 結果 | 直し方 |
|---|---|---|
| BodyのAnchoredにチェックを入れた | 座れるが、速度は0のままで動かない | エクスプローラでBodyを選び、プロパティの検索欄に「Anchored」と入れてチェックを外す |
| Bodyの中のTrackSliderのActuatorTypeをNoneにした | 座れるが、速度は0のままで動かない | エクスプローラでBodyの中のTrackSliderを選び、プロパティの検索欄に「ActuatorType」と入れ、右の「None」を押して開く一覧から「Motor」を押す |
| Bodyの中のTrackSliderのMotorMaxForceを0にした | 座れるが、速度は0のままで動かない | エクスプローラでBodyの中のTrackSliderを選び、プロパティの検索欄に「MotorMaxForce」と入れ、右の欄に「1000000」と入れてEnterキーを押す |
試したあとは、どれも表の直し方のとおりに戻しています。
AIに相談するときの伝え方
Roblox Studioで電車を作っています。
線路の土台 Ballast の中の Attachment と、車体 Body の中の Attachment を PrismaticConstraint(名前 TrackSlider、ActuatorType Motor、LowerLimit -90、UpperLimit 90)でつなぎ、
Train の中の Script で VehicleSeat の ThrottleFloat を見て TrackSlider.Velocity を変えています。2両目は RodConstraint でつないでいます。
駅で5秒止まってから、また走り出すようにしたいです。どう書き足せばよいですか。
よくある質問
速さを変えたいときは?
エクスプローラでTrainの中の「TrainScript」をダブルクリックして開き、コードの7行目の MAX_SPEED の「30」を書きかえます。MAX_SPEEDは、いちばん速いときの速さです。速くなるまでの早さは、コードの8行目の ACCEL の「10」で決まります。ACCELで決めた10なら、止まった状態から3秒で30になります。
次は、座って操縦する飛行機を作り、離陸・旋回・着陸まで動かします。次のステップ(上級 18/40)
次に知りたいことを選ぶ
- 次のステップ:座って操縦する飛行機を作り、離陸・旋回・着陸まで動かします → ロブロックス(Roblox)スタジオの飛行機の作り方
- 線路のない道を自由に走る車を作りたい → ロブロックス(Roblox)スタジオの車の作り方
- 上下に動く乗り物を作りたい → ロブロックス(Roblox)のエレベーターの作り方
- 同じ処理を1つにまとめたい → ロブロックス(Roblox)のモジュールスクリプトの使い方

























































































































