【🔰Roblox Studio入門⑤】HingeConstraint + VehicleSeatを使った、車輪が回転して動くトロッコの作り方

Roblox Studioでヒンジコンストレイント(HingeConstraint)を使い、車輪が回転してレールの上を前後に走るトロッコを制作します。
車輪の作り方から、ヒンジの設定、摩擦や密度の考え方、VehicleSeatを使った操作方法まで、実際に車輪が回って動く仕組みを作りながら解説しています。

💡HingeConstraintでトロッコを作る|車輪が回転してレールを走る仕組み

🔧 この動画で学べること

✅ 1. HingeConstraint を使った車輪の回転制御

✅ 2. 車輪(WheelFlange / WheelTread)の構成

✅ 3. Attachment の正しい位置合わせ

✅ 4. 摩擦や密度による走行の違い

✅ 5. VehicleSeat 入力で車輪を回して動かす方法

📺 チャプター目次 :
00:00 はじめに
00:07 レールを用意する
01:29 右前の車輪を作る
04:24 ベースパーツを作る
06:27 車輪を複製して4つにする
08:53 ボディを作る
09:17 VehicleSeatを追加
10:10 モデル化
10:24 スクリプトを追加
11:43 デバッグ

1. レールをツールボックスからゲットして設置しよう

STEP.1
「ホーム」タブの「ツールボックス」をクリック
STEP.2
「ツールボックス」ウィンドウが表示される

※「ツールボックス」ウィンドウが表示される場所は、画面の右側や下に表示される場合もあります。
STEP.3
「ツールボックス」の検索ボックスで「train rail」と検索する
STEP.4
検索結果から「train rail」というモデルをクリックして、ワークスペースに追加する
STEP.5
「ホーム」タブの「移動」ツールでレールを好きな場所に動かす
STEP.6
「ホーム」タブの「エクスプローラ」ボタンをクリック
STEP.7
「エクスプローラ」ウィンドウが表示される

※「エクスプローラ」ウィンドウには、ゲームを作るうえで欠かせない情報が表示されています。できるだけ表示しておくようにしましょう。
※通常は画面の右側に、「エクスプローラ」ウィンドウが表示されますが、画面の左側や下に表示される場合もあります。
STEP.8
STEP.4で追加した「train rail」というモデルを右クリック

※「エクスプローラ」ウィンドウには、現在のプレイスに含まれるすべてのオブジェクトが階層構造で表示されます。
STEP.9
「train rail」を右クリックして表示されたメニューから「名前を変更」を選ぶ
STEP10.
「Rail」という名前に変更しよう

※分かりやすい名前をつけることは、バグが少なく修正しやすいプログラムを作るための第一歩です。最初は面倒でも、この習慣が後でとても役立ちます。
STEP.11
「Rail」を選んだ状態で「ホーム」タブの「固定」ボタンをクリック

※レールのようなパーツを選んで「固定(Anchor)」すると、テストプレイしたときに重力で落ちたり、他のパーツにぶつかって動いたりしなくなります。
STEP.12
「Rail」を選んだ状態で、キーボードの「Ctrl」+「D」キーを押して複製する

※レールのようなパーツを選んだ状態で、キーボードの「Ctrl」+「D」キーを押すか、右クリックして表示されたメニューから「複製」を選ぶと、パーツが複製されます。
STEP.13
同じ場所かレールの真上に「Rail」が複製されるので、「ホーム」タブの「移動」ツールで動かす

※「ホーム」タブの「ジオメトリ」ボタンの「衝突」設定によって、複製される場所が変わります。

  • 「衝突」がON(チェックあり)の場合:パーツの真上などに、重ならないように複製されます。
  • 「衝突」がOFF(チェックなし)の場合:元のパーツと完全に同じ場所に重なって複製されます。一見すると複製できていないように見えるので注意してください。
STEP.14
「ホーム」タブの「移動」ツールで、2つのレールを連結する

2. 右前の車輪を作ろう

STEP.1
車輪を作る前の事前準備として、「ホーム」タブの「ジオメトリ」をクリック
 
STEP.2
「衝突」と「表面の結合」にチェックを入れる。

※「衝突(Collisions)」をONにすると、パーツ同士がぶつかるようになり、通り抜けなくなります。
※「表面の結合(Join Surfaces)」をONにすると、パーツ同士が接した面で自動的にくっつき(溶接され)、離れなくなります。
STEP.3
スナップの設定を「0.5スタッド」「45°」とし、それぞれチェックを入れる

※移動を「0.5 スタッド」、回転を「45°」とし、それぞれの機能をONにすると、パーツが0.5スタッド間隔で動き、45°間隔でカクカクと回転するようになります。
STEP.4
「ホーム」タブの「パーツ」横の▼をクリックし、メニューから「円柱」を選ぶ

※「パーツ」横の▼をクリックすると、ドロップダウンメニューが表示されるので、メニューから「円柱」のパーツを選んで下さい。
STEP.5
パーツがワークスペースに追加されたら、「ホーム」タブの「プロパティ」ボタンをクリック

※既に「プロパティ」ウィンドウが表示されている場合は、STEP.5はスキップして下さい。
STEP.6
「プロパティ」ウィンドウが表示される

※「プロパティ」ウィンドウは画面の左側、「エクスプローラ」ウィンドウの下に表示され場合もあります。ウィンドウのヘッダー部分をドラッグすると、自分の好きな場所に動かすことが出来ます。
STEP.7
「プロパティ」でPartの「Size」を「0.5, 5, 5」にする

※「Part(円柱)」を選んだ状態で、「プロパティ」ウィンドウの「Size」の横にある数値をクリックし、「0.5, 5, 5」と入力してEnterキーを押してください。直径5スタッド、厚さ0.5スタッドの円柱に形が変わります。
STEP.8
「Part(円柱)」を選んだ状態で、キーボードの「Ctrl」+「D」キーを押して複製する

※STEP.2で「ジオメトリ」の「衝突(Collisions)」をONにしたので、円柱の真上に複製されます。
STEP.9
「プロパティ」で複製されたPartの「Size」を「1.5, 4, 4」にする

※複製した「Part(円柱)」を選んだ状態で、「プロパティ」ウィンドウの「Size」の横にある数値をクリックし、「1.5, 4, 4」と入力してEnterキーを押してください。直径4スタッド、厚さ1.5スタッドの円柱に形が変わります。複製元のパーツよりも直径は1スタッド小さく、厚みは大きくなります。
STEP.10
2つのPart(円柱)を溶接したいので、複製した上のPartを「移動」ツールで一旦持ち上げ
STEP.11
持ち上げた上のPart(円柱)を下げて、下のPartに接面させる

※STEP.2で「ジオメトリ」の「結合(Join Surfaces)」をONにしたので、パーツ同士が接した面で自動的にくっつき(溶接され)、離れなくなります。
STEP.12
2つのPart(円柱)が溶接された
STEP.13
「Ctrl」キーを押しながら、2つのPart(円柱)を選択する

※「エクスプローラ」にある2つのPart(円柱)を、「Ctrl」キーを押しながら順番にクリックして選択します。ワークスペース(Workspace)上の2つのPart(円柱)を「Ctrl」キーを押しながらクリックすることでも複数選択ができます。
STEP.14
「ホーム」タブの「回転」ツールをクリックして選択
STEP.15
レールの向きに合うように、90°回転させます

※STEP.3のスナップの設定で、回転を「45°」と設定したので、45°間隔でカクカクと回転し、90°回転させることが出来ます。
STEP.16
「プロパティ」で2つのPartの「Material(素材)」を「Rubber(ゴム)」に設定する

※現実の世界では車輪は「金属」ですが、Robloxの標準設定の「Metal(金属)」は摩擦が少なく、とても滑りやすい性質があります。そのままだと車輪がレールの上で空回りして進まなくなってしまうため、ここではしっかりとレールをつかむことができる「Rubber(ゴム)」に設定します。
STEP.17
レールの内側のPart(直径の大きい、薄い方)の名前を「WheelFlange」に変更する

※Partの名前は、エクスプローラの対象Partを右クリックして表示されるメニューから「名前を変更」を選んで変更して下さい。「プロパティ」ウィンドウの「データ」ー「Name」の横の欄をクリックして変更することも可能です。
STEP.18
レールの上に設置するPart(直径が小さい、分厚い方)の名前を「WheelTread」に変更する

※Partの名前は、エクスプローラの対象Partを右クリックして表示されるメニューから「名前を変更」を選んで変更して下さい。「プロパティ」ウィンドウの「データ」ー「Name」の横の欄をクリックして変更することも可能です。
STEP.19
もう一度「Ctrl」キーを押しながら、2つのPart(円柱)を選択する

※「エクスプローラ」にある「WheelFlange」「WheelTread」を、「Ctrl」キーを押しながら順番にクリックして選択します。ワークスペース(Workspace)上の2つのPartを「Ctrl」キーを押しながらクリックすることでも複数選択ができます。
STEP.20
「プロパティ」の「CustomPhysicalProperties」をONにする

※「プロパティ」ウィンドウの「パーツ」ー「CustomPhysicalProperties」の横のチェックボックにチェックを入れます。これにより、摩擦(滑りにくさ)や重さなどを、自分で細かく調整することが出来るようになります。

STEP.21
車輪パーツの密度・弾性・摩擦などを設定する

  • Density(密度):0.7 ※パーツの重さに関係します。
  • Elasticity(弾性):0 ※跳ね返りやすさです。0にすると跳ねなくなります。
  • Friction(摩擦):1.2 ※滑りにくさです。数値が高いほどグリップ力が強くなります。
  • ElasticityWeight(弾性の重み):1 ※相手のパーツとぶつかった時、自分の設定をどれくらい優先するかです。
  • FrictionWeight(摩擦の重み):1 ※相手(レール)の設定よりも、自分の「摩擦1.2」を優先させるために設定します。

3. 右前車輪の「ベースパーツ」を作ろう

STEP.1
「ホーム」タブの「パーツ」横の▼をクリックし、メニューから「ブロック」を選ぶ
   ※「パーツ」横の▼をクリックすると、ドロップダウンメニューが表示されるので、メニューから「ブロック」のパーツを選んで下さい。
STEP.2
「プロパティ」でPartの「Size」を「1,1,1」にする

※「Part(ブロック)」を選んだ状態で、「プロパティ」ウィンドウの「Size」の横にある数値をクリックし、「1,1,1」と入力してEnterキーを押してください。一辺が1スタッドの立方体に形が変わります。
STEP.3
「WheelFrange」Partから少し離れた場所に立方体(ベースパーツ)を移動する
STEP.4
「モデル」タブをクリックする
STEP.5
「拘束」横の▼をクリックする
STEP.6
「ヒンジ(Hinge)」を選択する
   
STEP.7
ポインターの形が変わったら、立方体(ベースパーツ)の車輪側の面をクリックして
STEP.8
マウスを右クリックしてカメラを回転させて
STEP.9
車輪(直径が大きくて薄い方)の「WheelFlange」の中心をクリックする
STEP.10
ベースパーツに「Attachment」と「HingeConstraint」が生成される
STEP.11
「WheelFlange」にも「Attachment」が生成される
STEP.12
「表示」メニューの「溶接を表示」と「拘束の詳細を表示」のチェックボックスにチェックを入れる

※これをONにすると、透明で見えなかった「Attachment」や「Hinge」のアイコン、溶接(Weld)の線などが画面に表示されるようになります。
STEP.13
「Attachment」の位置を確認しながら、ベースパーツの設定が出来るようになった
STEP.14
ベースパーツを動かして、「WheelFlange」とベースパーツの「Attachment」の位置が同じになるようにする

※「モデル」タブのスナップ機能(0.5スタッドなど)を使って、画面上で見て2つのAttachment(緑の玉)が重なるように調整しましょう。少しでもずれると、車輪がガタガタ震えたり、正しく回転しないので注意して下さい。
STEP.15
「HingeConstraint」の名前を「Hinge_FR」に変更する
STEP.16
ベースパーツの名前を「Base」に変更する

4. 車輪を複製して4つにしよう

STEP.1
これまで作ったパーツ、Attachment、HingeConstraintを、「エクスプローラ」で「Ctrl」キーを押しながら全て選択

※以下の右車輪用のパーツ、Attachment、HingeConstraintを「Ctrl」キーを押しながら選択して下さい。

  • Baseパーツ
    • Attachment
    • Hinge_FR(HingeConstraint)
  • WheelFlangeパーツ
    • Attachment
  • WheelTread
STEP.2
「Ctrl」+Gキーでグループ化(モデル化)する
STEP.3
モデルの名前を「Wheel_FR」に変更する

※右前輪のモデル「Wheel_FR」のFはフロント(Front/前)、Rはライト(Right/右)の略です。
STEP.4
「ジオメトリ」ボタンをクリックして、「表面の結合」のチェックを外す

※「表面の結合(Join Surfaces)」がONになっていると、パーツ同士が接触した際に自動的に溶接(Weld)され、動かなくなってしまいます。 車輪がレールや地面にくっついて回転できなくなるのを防ぐため、必ずチェックを外してください。
STEP.5
「移動」ツールで右前輪のモデルをレールの上に移動
STEP.6
「エクスプローラ」上で「Wheel_FR」を選択して
STEP.7
「Ctrl」+Dキーで複製する

※複製されたモデルは、「ジオメトリ」の「衝突」がONならば、元のモデルの真上に複製されます。
STEP.8
複製したモデルを、「回転」ツールで横方向に180°回転する

※青色のハンドルをドラッグして動かすと、モデルが横方向に回転します。
STEP.9
「移動」ツールで、左側のレールの上に移動する
STEP.10
複製したモデルの名前を「Wheel_FL」に変更する

※左前輪のモデル「Wheel_FL」のFはフロント(Front/前)、Lはレフト(Left/左)の略です。
STEP.11
「Wheel_FL」の左横の▼をクリックして、HingeConstraintの名前を「Hinge_FL」に変更する
STEP.12
Part(ベースパーツ)の名前を「Base」に変更する
STEP.13
「ジオメトリ」ボタンをクリックして、「衝突」のチェックも外す

「衝突(Collisions)」がONになっていると、溶接はされていなくても、パーツ同士が接触していると動かしづらい(引っかかってしまう)場合があるため、チェックを外して下さい。
STEP.14
「Shift」キーを押しながら、ビューポート上の「Wheel_FR」と「Wheel_FL」を選択する

※「エクスプローラ」ウィンドウ上で、「Ctrl」キーを押しながら「Wheel_FR」モデルと「Wheel_FL」モデルをクリックして選択することも可能です。
STEP.15
「Ctrl」+Dキーで複製する

※STEP.7での複製と違い、「ジオメトリ」の「衝突」がOFFなので複製元の2つの車輪と同じ位置に重なって複製されます。
STEP.16
「移動」ツールで複製した2つの車輪を後方に動かす
STEP.17
複製した後ろ車輪用の2つの車輪の名前、HingeConstraint、Part(ベースパーツ)の名前を変更する

※右後輪のモデル名を「Wheel_BR」、HingeConstraintを「Hinge_BR」、Part(ベースパーツ)を「Base」に変更して下さい。
※左後輪のモデル名を「Wheel_BL」、HingeConstraintを「Hinge_BL」、Part(ベースパーツ)を「Base」に変更して下さい。
※右後輪のモデル「Wheel_BR」「Hinge_BR」のBはバック(Back/後)、Rはライト(Right/右)の略です。
※左後輪のモデル「Wheel_BL」「Hinge_BL」のBはバック(Back/後)、Lはレフト(Left/左)の略です。
STEP.18
「エクスプローラ」の各車輪の名前、HingeConstraint、Part(ベースパーツ)の名前が下記のようになっているか確認

※モデル名や、ベースパーツの名前、HingeConstraintの名前が、異なる場合には今後作成するスクリプトが正しく動かなくなります。注意して確認して下さい。

5. トロッコのボディを作り、VehicleSeatを設置する

STEP.1
「ホーム」タブの「パーツ」横の▼をクリックし、メニューから「ブロック」を選ぶ
STEP.2
「移動」ツールや「拡大 / 縮小」ツールでトロッコのボディを作る

※「ホーム」タブの「拡大 / 縮小」ツールで、ブロックのパーツをトロッコのボディとして適切なサイズに変更して下さい。赤や青のハンドルをドラッグすると大きさが変わります。
STEP.3
追加したPartの名前を「Body」に変更する
STEP.4
「プロパティ」ウィンドウで「Material」を「Metal」に変更する

※素材(Material)を変更しなくても走行動作には影響しませんが、金属の質感に変えることで、よりトロッコらしい見た目になります。
STEP.5
「エクスプローラ」ウィンドウ内のWorkspace横の⊕をクリック
STEP.6
表示されたメニューから「VehicleSeat」をクリック

※検索ボックスで「v」と入力すると、リストが絞り込まれて「VehicleSeat」が見つけやすいです。
STEP.7
「移動」ツールで「VehicleSeat」を「Body」の上に設置
STEP.8
「モデル」タブの「溶接」ボタンをクリック

※「溶接」を選ぶと、マウスポインタの形が、矢印から溶接のような形に変わります。
STEP.9
ビューポートの「VehicleSeat」と「Body」を連続でクリック

※「溶接」ボタンをクリックした後に、「VehicleSeat」と「Body」をクリックすると、それらが互いにくっつき(溶接)され、バラバラにならなくなります。
STEP.10
「溶接」ボタンをクリックし、「Base」と「Body」を連続でクリック
STEP.11
4つの車輪の「Base」を「Body」と溶接する

※STEP.10の処理を4つの車輪の「Base」に行い、それぞれの「Base」を「Body」に溶接して下さい。
STEP.12
「エクスプローラ」の「VehicleSeat」4つの「Wheel」「Body」を選択する

※「Ctrl」キーを押しながら、「VehicleSeat」「Wheel_FR」「Wheel_FL」「Wheel_BR」「Wheel_BL」「Body」を選択して下さい。
STEP.13
「Ctrl」+ Gキーでグループ化(モデル化)
STEP.14
モデルの名前を「Train」に変更

6. スクリプトを追加し、矢印キーでトロッコに乗れるようにしよう

STEP.1
「エクスプローラ」ウィンドウ内のWorkspace横の⊕をクリック
 
STEP.2
表示されたメニューから「Script」をクリック
STEP.3
トロッコを動かすスクリプトを入力する

※スクリプトはシンプリにしています。「print(“Hello world!”)」というあらかじめ入力されていたコードを削除して、こちらのスクリプトをコピーペーストして下さい。
STEP.4
RunServiceを取得しているコード

※RunServiceは、毎フレーム処理を行うためのサービスです。
STEP.5
Trainモデルと操作用のVehicleSeatを取得するコード

※ここまで作ったTrainモデルと、Trainモデル内のVehicleSeatをスクリプト内で使えるようにしています。
STEP.6
トロッコの調整用パラメータを設定するコード

※トロッコの車輪の回転速度=10、トルク(車輪を回すパワー)=40000、曲がり量=0を設定します。
STEP.7
車輪ごとのHingeConstraintを取得しているコード

※ここまで作った、4つの車輪のHingeConstraintをスクリプト内で使えるようにしています。
STEP.8
4つの車輪のHingeConstraintの初期化を行っているコード
※4つの車輪のHingeConstraintをモータータイプ、トルクをMAX_TORUQUE(=40000)、回転速度を「0」にセットしています。
STEP.9
RunServiceのHeartbeatイベント

※RunServiceのHeartbeatイベントにより、ここに定義した関数が毎フレーム毎に繰り返し実行されます。
STEP.10
VehicleSeatから前後入力を取得するコード

※Wキー(または↑キー)を押すとthrottleは「1」になり、Sキー(または↓キー)を押すと「-1」になります。キーを押していないときは「0」です。
STEP.11
throttleに最大回転速度をかけて、目標となる車輪の回転速度を計算するコード

※MAX_TORQUE = 40000なので、Wキー(または↑キー)を押すとtargetは「40000」になり、Sキー(または↓キー)を押すと「-40000」になります。
STEP.12
トロッコは左右に曲がらないので、曲がり量STEER_DIFFは「0」としたので
STEP.13
左右の車輪の回転速度には、targetの値がそのまま代入される
STEP.14
それぞれの車輪の回転速度を設定するコード

※もしも、逆方向に動いてしまったら、以下のように左車輪の方を+(プラス)にして、右車輪の方を-(マイナス)にして下さい。
hingeByWheel.FL.AngularVelocity =  leftAV
hingeByWheel.BL.AngularVelocity =  leftAV
hingeByWheel.FR.AngularVelocity = -rightAV
hingeByWheel.BR.AngularVelocity = -rightAV
STEP.15
スタートボタン▶をクリックしてトロッコに乗ってみよう!
STEP.16
Wキー(または↑キー)で前進し、Sキー(または↓キー)でバックする

7. トロッコのサンプルスクリプト

luau
– 毎フレーム処理に使う RunService を取得
local RunService = game:GetService(“RunService”)

– Train モデルと操作用 VehicleSeatを取得
local train = script.Parent
local seat = train:WaitForChild(“VehicleSeat”)

– 調整用パラメータ設定
local MAX_ANGULAR_VELOCITY = 10 — 車輪の回転速度
local MAX_TORQUE = 40000
local STEER_DIFF = 0   — 直進のみ、車として設定する場合は曲がり量(0.8くらい)

– 車輪ごとの HingeConstraintの取得
local hingeByWheel = {
FL = train:WaitForChild(“Wheel_FL”):WaitForChild(“Base”):WaitForChild(“Hinge_FL”),
FR = train:WaitForChild(“Wheel_FR”):WaitForChild(“Base”):WaitForChild(“Hinge_FR”),
BL = train:WaitForChild(“Wheel_BL”):WaitForChild(“Base”):WaitForChild(“Hinge_BL”),
BR = train:WaitForChild(“Wheel_BR”):WaitForChild(“Base”):WaitForChild(“Hinge_BR”),
}

– 4つのヒンジをモーターとして初期化
for _, h in pairs(hingeByWheel) do
h.ActuatorType = Enum.ActuatorType.Motor
h.MotorMaxTorque = MAX_TORQUE
h.AngularVelocity = 0
end

– 毎フレーム、入力に応じて車輪を回転
RunService.Heartbeat:Connect(function()
– 前後入力(W/Sキー)
–  1  : 前進
–  0  : 停止
– -1  : 後進
local throttle = seat.Throttle

– 左右入力(A/Dキー)
– 今回は使用しないが、拡張用に取得している
local steer = seat.Steer

– 入力から目標の回転速度を計算
local target = throttle * MAX_ANGULAR_VELOCITY

– 左右の回転速度(今回は同じ値)
local leftAV  = target * (1 – steer * STEER_DIFF)
local rightAV = target * (1 + steer * STEER_DIFF)

– 左右のヒンジ軸の向きが逆なので、左側の車輪だけ回転方向を反転する
hingeByWheel.FL.AngularVelocity = -leftAV
hingeByWheel.BL.AngularVelocity = -leftAV
hingeByWheel.FR.AngularVelocity =  rightAV
hingeByWheel.BR.AngularVelocity =  rightAV
end)

Roblox Studioとは?

Roblox Studioは、Roblox用の カスタムゲームを作成できる公式の無料 ユーティリティソフトウェア。ミニゲーム、障害物コース、ロールプレイングストーリーなど、さまざまなゲーム作ることが出来ます 。プログラミング言語Luaを利用してプログラミングします。Robux(ロバックス)と呼ばれる仮想キャッシュを、ゲーム内アイテムに対して使用することで収益を得る仕組みを構築することも出来るので、子供たちはゲーム開発を通じでビジネスの感覚が身につけられる。

Robloxとは?

Robloxは、ユーザーがRoblox Studioを使ってゲームをプログラムしたり、他のユーザーが作成したゲームをプレイしたりできるオンラインゲーミングプラットフォームおよびゲーム作成システムです。