

💡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. レールをツールボックスからゲットして設置しよう

※「ツールボックス」ウィンドウが表示される場所は、画面の右側や下に表示される場合もあります。

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

※「エクスプローラ」ウィンドウには、現在のプレイスに含まれるすべてのオブジェクトが階層構造で表示されます。

※分かりやすい名前をつけることは、バグが少なく修正しやすいプログラムを作るための第一歩です。最初は面倒でも、この習慣が後でとても役立ちます。

※レールのようなパーツを選んで「固定(Anchor)」すると、テストプレイしたときに重力で落ちたり、他のパーツにぶつかって動いたりしなくなります。

※レールのようなパーツを選んだ状態で、キーボードの「Ctrl」+「D」キーを押すか、右クリックして表示されたメニューから「複製」を選ぶと、パーツが複製されます。

※「ホーム」タブの「ジオメトリ」ボタンの「衝突」設定によって、複製される場所が変わります。
- 「衝突」がON(チェックあり)の場合:パーツの真上などに、重ならないように複製されます。
- 「衝突」がOFF(チェックなし)の場合:元のパーツと完全に同じ場所に重なって複製されます。一見すると複製できていないように見えるので注意してください。
2. 右前の車輪を作ろう

※「衝突(Collisions)」をONにすると、パーツ同士がぶつかるようになり、通り抜けなくなります。
※「表面の結合(Join Surfaces)」をONにすると、パーツ同士が接した面で自動的にくっつき(溶接され)、離れなくなります。

※移動を「0.5 スタッド」、回転を「45°」とし、それぞれの機能をONにすると、パーツが0.5スタッド間隔で動き、45°間隔でカクカクと回転するようになります。

※「パーツ」横の▼をクリックすると、ドロップダウンメニューが表示されるので、メニューから「円柱」のパーツを選んで下さい。

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

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

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

※STEP.2で「ジオメトリ」の「衝突(Collisions)」をONにしたので、円柱の真上に複製されます。

※複製した「Part(円柱)」を選んだ状態で、「プロパティ」ウィンドウの「Size」の横にある数値をクリックし、「1.5, 4, 4」と入力してEnterキーを押してください。直径4スタッド、厚さ1.5スタッドの円柱に形が変わります。複製元のパーツよりも直径は1スタッド小さく、厚みは大きくなります。

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

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

※STEP.3のスナップの設定で、回転を「45°」と設定したので、45°間隔でカクカクと回転し、90°回転させることが出来ます。

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

※Partの名前は、エクスプローラの対象Partを右クリックして表示されるメニューから「名前を変更」を選んで変更して下さい。「プロパティ」ウィンドウの「データ」ー「Name」の横の欄をクリックして変更することも可能です。

※Partの名前は、エクスプローラの対象Partを右クリックして表示されるメニューから「名前を変更」を選んで変更して下さい。「プロパティ」ウィンドウの「データ」ー「Name」の横の欄をクリックして変更することも可能です。

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

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

- Density(密度):0.7 ※パーツの重さに関係します。
- Elasticity(弾性):0 ※跳ね返りやすさです。0にすると跳ねなくなります。
- Friction(摩擦):1.2 ※滑りにくさです。数値が高いほどグリップ力が強くなります。
- ElasticityWeight(弾性の重み):1 ※相手のパーツとぶつかった時、自分の設定をどれくらい優先するかです。
- FrictionWeight(摩擦の重み):1 ※相手(レール)の設定よりも、自分の「摩擦1.2」を優先させるために設定します。
3. 右前車輪の「ベースパーツ」を作ろう
※「パーツ」横の▼をクリックすると、ドロップダウンメニューが表示されるので、メニューから「ブロック」のパーツを選んで下さい。

※「Part(ブロック)」を選んだ状態で、「プロパティ」ウィンドウの「Size」の横にある数値をクリックし、「1,1,1」と入力してEnterキーを押してください。一辺が1スタッドの立方体に形が変わります。

※これをONにすると、透明で見えなかった「Attachment」や「Hinge」のアイコン、溶接(Weld)の線などが画面に表示されるようになります。

※「モデル」タブのスナップ機能(0.5スタッドなど)を使って、画面上で見て2つのAttachment(緑の玉)が重なるように調整しましょう。少しでもずれると、車輪がガタガタ震えたり、正しく回転しないので注意して下さい。
4. 車輪を複製して4つにしよう

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

※右前輪のモデル「Wheel_FR」のFはフロント(Front/前)、Rはライト(Right/右)の略です。

※「表面の結合(Join Surfaces)」がONになっていると、パーツ同士が接触した際に自動的に溶接(Weld)され、動かなくなってしまいます。 車輪がレールや地面にくっついて回転できなくなるのを防ぐため、必ずチェックを外してください。

※複製されたモデルは、「ジオメトリ」の「衝突」がONならば、元のモデルの真上に複製されます。

※青色のハンドルをドラッグして動かすと、モデルが横方向に回転します。

※左前輪のモデル「Wheel_FL」のFはフロント(Front/前)、Lはレフト(Left/左)の略です。

「衝突(Collisions)」がONになっていると、溶接はされていなくても、パーツ同士が接触していると動かしづらい(引っかかってしまう)場合があるため、チェックを外して下さい。

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

※STEP.7での複製と違い、「ジオメトリ」の「衝突」がOFFなので複製元の2つの車輪と同じ位置に重なって複製されます。

※右後輪のモデル名を「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/左)の略です。

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

※「ホーム」タブの「拡大 / 縮小」ツールで、ブロックのパーツをトロッコのボディとして適切なサイズに変更して下さい。赤や青のハンドルをドラッグすると大きさが変わります。

※素材(Material)を変更しなくても走行動作には影響しませんが、金属の質感に変えることで、よりトロッコらしい見た目になります。

※検索ボックスで「v」と入力すると、リストが絞り込まれて「VehicleSeat」が見つけやすいです。

※「溶接」を選ぶと、マウスポインタの形が、矢印から溶接のような形に変わります。

※「溶接」ボタンをクリックした後に、「VehicleSeat」と「Body」をクリックすると、それらが互いにくっつき(溶接)され、バラバラにならなくなります。

※STEP.10の処理を4つの車輪の「Base」に行い、それぞれの「Base」を「Body」に溶接して下さい。

※「Ctrl」キーを押しながら、「VehicleSeat」「Wheel_FR」「Wheel_FL」「Wheel_BR」「Wheel_BL」「Body」を選択して下さい。
6. スクリプトを追加し、矢印キーでトロッコに乗れるようにしよう

※RunServiceは、毎フレーム処理を行うためのサービスです。

※ここまで作ったTrainモデルと、Trainモデル内のVehicleSeatをスクリプト内で使えるようにしています。

※トロッコの車輪の回転速度=10、トルク(車輪を回すパワー)=40000、曲がり量=0を設定します。

※ここまで作った、4つの車輪のHingeConstraintをスクリプト内で使えるようにしています。

※RunServiceのHeartbeatイベントにより、ここに定義した関数が毎フレーム毎に繰り返し実行されます。

※Wキー(または↑キー)を押すとthrottleは「1」になり、Sキー(または↓キー)を押すと「-1」になります。キーを押していないときは「0」です。

※MAX_TORQUE = 40000なので、Wキー(または↑キー)を押すとtargetは「40000」になり、Sキー(または↓キー)を押すと「-40000」になります。

※もしも、逆方向に動いてしまったら、以下のように左車輪の方を+(プラス)にして、右車輪の方を-(マイナス)にして下さい。
hingeByWheel.FL.AngularVelocity = leftAV
hingeByWheel.BL.AngularVelocity = leftAV
hingeByWheel.FR.AngularVelocity = -rightAV
hingeByWheel.BR.AngularVelocity = -rightAV
7. トロッコのサンプルスクリプト
–– 毎フレーム処理に使う 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用の カスタムゲームを作成できる公式の無料 ユーティリティソフトウェア。ミニゲーム、障害物コース、ロールプレイングストーリーなど、さまざまなゲーム作ることが出来ます 。プログラミング言語Luaを利用してプログラミングします。Robux(ロバックス)と呼ばれる仮想キャッシュを、ゲーム内アイテムに対して使用することで収益を得る仕組みを構築することも出来るので、子供たちはゲーム開発を通じでビジネスの感覚が身につけられる。
Robloxは、ユーザーがRoblox Studioを使ってゲームをプログラムしたり、他のユーザーが作成したゲームをプレイしたりできるオンラインゲーミングプラットフォームおよびゲーム作成システムです。

