「ロブロックスのラグドールって何?」「キャラクターがぐにゃっと倒れる動きを、自分のゲームに入れたい」
ロブロックス(Roblox)のラグドールとは何かと、スタジオでの作り方を、実際の画像付きで誰でも簡単に分かるように解説します。配布モデルは使わず、「+」で入れた部品とスクリプトだけで作ります。触れると倒れて起き上がる黄色の床と、触れると倒れたまま復活する赤い床を動かします。
上級ステップ20/40 前の記事:ロブロックス(Roblox)スタジオのロープの作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。2つの部品を結ぶ印(Attachment)はロープの作り方でも使いました。
先に答え
| 知りたいこと | 答え |
|---|---|
| ラグドールとは? | キャラクターの体の力が抜けて、重力やぶつかる力でぐにゃっと倒れる状態のこと。倒れ方は、そのときの向きや勢いで毎回少し変わる |
| どうやって作る? | 体の関節(Motor6D)を止めて、代わりにBallSocketConstraint(自由に回る関節)を入れる |
| 倒れたあと起き上がるには? | 入れた部品を消して、関節(Motor6D)を元に戻す |
| 体力が0のときも倒れるには? | 体がバラバラにならないよう、BreakJointsOnDeathをオフにしてからラグドールにする |
今回の完成状態:黄色の床に触れると、下の画像のようにキャラクターがぐにゃっと倒れます。3秒後に起き上がり、また歩ければ成功です。

作るもの
| 名前 | 種類 | 置く場所 | 役目 |
|---|---|---|---|
| FallPad | Part | Workspace | 触れると倒れて、3秒後に起き上がる黄色の床 |
| KillPad | Part | Workspace | 触れると体力が0になり、倒れたまま復活を待つ赤い床 |
| RagdollScript | Script | ServerScriptService | 床に触れた人をラグドールにする |
1. 黄色の床を作る
この記事の画像は、床が見やすい位置までカメラを動かして撮っています。「+」で入れたPartは、実際の画面ではスタートの台(ゲームを始める場所の板)の上あたりに見えます。Positionを入れた床が3D画面に見えないときは、エクスプローラでその床を押して選び、3D画面にマウスを乗せてFキーを押します。BrickColorの名前が見た目の色と違うことがありますが、Colorの数字が合っていれば大丈夫です。
新しいBaseplateを開きます。エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。画像の赤い枠は、その説明で押す場所や見る場所を示しています。画像を押すと大きく表示できます。

| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 10, 1, 10 | 歩いて乗れる広さの床にする |
| Position(▼CFrameのすぐ下) | -10, 0.5, -25 | スタートの台の左奥に置く |
| Color | 240, 200, 0 | 黄色にする(BrickColorは「Deep orange」になる) |
| Anchored | チェックを入れる | 床が動かないように固定する |
- 一覧の検索欄に「Part」と入れて、一覧の「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「FallPad」に変えてEnterキーを押します(下の2枚目)
- FallPadを選んだまま、プロパティの検索欄に「Size」と入れ(前の文字が残っているときは消してから入れます)、名前がちょうど「Size」の欄に「10, 1, 10」と入れてEnterキーを押します(下の3枚目)
- 続けてFallPadを選んだまま、検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「-10, 0.5, -25」と入れてEnterキーを押します(下の4枚目)
- 続けてFallPadを選んだまま、検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「240, 200, 0」と入れ、Enterキーを押します(下の5枚目)
- 続けてFallPadを選んだまま、検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)
2. 赤い床を作る
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 10, 1, 10 | 黄色の床と同じ広さにする |
| Position(▼CFrameのすぐ下) | 10, 0.5, -25 | スタートの台の右奥に置く |
| Color | 200, 0, 0 | 赤にする(BrickColorは「Crimson」になる) |
| Anchored | チェックを入れる | 床が動かないように固定する |
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
- エクスプローラでPartを選んだままF2キーを押し、名前を「KillPad」に変えてEnterキーを押します(下の2枚目)
- KillPadを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「10, 1, 10」と入れてEnterキーを押します(下の3枚目)
- 続けてKillPadを選んだまま、検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「10, 0.5, -25」と入れてEnterキーを押します(下の4枚目)
- 続けてKillPadを選んだまま、検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「200, 0, 0」と入れ、Enterキーを押します(下の5枚目)
- 続けてKillPadを選んだまま、検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)
3. ラグドールのスクリプトを入れる
スクリプトの置き場所
ServerScriptServiceは、全員に共通の処理を動かすスクリプト(サーバーのスクリプト)を入れる場所です。エクスプローラのWorkspaceより下の行にあります。
- エクスプローラを下へスクロールして「ServerScriptService」にマウスを乗せ、「+」を押します。一覧の検索欄に「Script」と入れて「Script」を押します(下の1枚目)
- スクリプトの画面が開きます。エクスプローラの「Script」を1回押してからF2キーを押し、名前を「RagdollScript」に変えてEnterキーを押します(下の2枚目)
- RagdollScriptを選んだまま、プロパティの検索欄に「RunContext」と入れ、「Legacy」になっていることを確かめます(下の3枚目)。RunContextはスクリプトが動く場所の設定で、ServerScriptServiceの中のScriptはLegacyのままで動きます
上のタブが「RagdollScript」になっていることを確かめます。中身を全部消して、次のコードを貼り付けます(コードの画面の中を押してからCtrl + Aキーで全部選び、Deleteキーで消します)。
-- 床に触れるとぐにゃっと倒れて、起き上がるスクリプト
local Players = game:GetService("Players")
local fallPad = workspace:WaitForChild("FallPad")
local killPad = workspace:WaitForChild("KillPad")
local DOWN_TIME = 3 -- 倒れている秒数
local BEND_ANGLE = 60 -- 関節が曲がる角度の上限
local function startRagdoll(character)
local humanoid = character:FindFirstChild("Humanoid")
local root = character:FindFirstChild("HumanoidRootPart")
root:SetNetworkOwner(nil)
humanoid.PlatformStand = true
root.CanCollide = false
for _, part in character:GetChildren() do
if part:IsA("BasePart") and part ~= root then
part.CanCollide = true
end
end
for _, joint in character:GetDescendants() do
if joint:IsA("Motor6D") and joint.Name ~= "Root" then
local attachment0 = Instance.new("Attachment")
attachment0.Name = "RagdollAttachment"
attachment0.CFrame = joint.C0
attachment0.Parent = joint.Part0
local attachment1 = Instance.new("Attachment")
attachment1.Name = "RagdollAttachment"
attachment1.CFrame = joint.C1
attachment1.Parent = joint.Part1
local socket = Instance.new("BallSocketConstraint")
socket.Name = "RagdollSocket"
socket.Attachment0 = attachment0
socket.Attachment1 = attachment1
socket.LimitsEnabled = true
socket.UpperAngle = BEND_ANGLE
socket.Parent = joint.Part0
joint.Enabled = false
end
end
root.AssemblyAngularVelocity = root.CFrame.RightVector * -8
end
local function stopRagdoll(character)
local humanoid = character:FindFirstChild("Humanoid")
local root = character:FindFirstChild("HumanoidRootPart")
for _, item in character:GetDescendants() do
if item.Name == "RagdollAttachment" or item.Name == "RagdollSocket" then
item:Destroy()
elseif item:IsA("Motor6D") then
item.Enabled = true
end
end
root.CanCollide = true
humanoid.PlatformStand = false
character:PivotTo(CFrame.new(root.Position + Vector3.new(0, 3, 0)))
humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
root:SetNetworkOwner(Players:GetPlayerFromCharacter(character))
end
local busy = {}
fallPad.Touched:Connect(function(hit)
local character = hit.Parent
local player = Players:GetPlayerFromCharacter(character)
if not player or busy[player] then
return
end
busy[player] = true
startRagdoll(character)
task.wait(DOWN_TIME)
stopRagdoll(character)
task.wait(2)
busy[player] = nil
end)
killPad.Touched:Connect(function(hit)
local character = hit.Parent
local humanoid = character:FindFirstChild("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid.BreakJointsOnDeath = false
humanoid.Health = 0
startRagdoll(character)
end
end)
コードは長いので、貼り付けたあとの画面の最初と最後を載せます。下の1枚目がコードの1行目から、2枚目が最後の行までです。
コードの読み方
ロブロックスのキャラクターは、腕や脚などの部品がMotor6Dという関節でつながり、アニメーションで動いています。ラグドールは、このMotor6Dを止めて、代わりに自由に回るBallSocketConstraintを同じ場所に入れたものです。BallSocketConstraintは、2つの印を同じ位置に保ったまま、すべての向きに回れるようにする部品です(Robloxの公式の説明による働きです)。
| コードの部分 | していること |
|---|---|
DOWN_TIME | 倒れている秒数。DOWN_TIMEで決めた3秒たつと起き上がる |
BEND_ANGLE | 関節が曲がる角度の上限。BEND_ANGLEで決めた60度まで曲がる |
startRagdoll | キャラクターをラグドールにする処理 |
root:SetNetworkOwner(nil) | 体の動きの計算を、遊ぶ人のパソコンからサーバーへ移す。rootはHumanoidRootPart(体の中心の見えない部品) |
humanoid.PlatformStand = true | キャラクターが自分で立とうとするのをやめさせる |
root.CanCollide = false | 体の中心の見えない部品は、ぶつからない設定にする |
part.CanCollide = true | 体の部品が床をすり抜けないように、ぶつかる設定にする |
joint:IsA("Motor6D") | 体の中のMotor6Dを探す。体の中心をつなぐ Root という名前の関節だけは残す |
attachment0.CFrame = joint.C0 | 関節と同じ場所に印を作る |
socket.LimitsEnabled = true | 曲がる角度に上限を付ける |
joint.Enabled = false | Motor6Dを止める |
root.AssemblyAngularVelocity | 体に回る勢いを付けて、後ろへ倒す |
stopRagdoll | 印とBallSocketConstraintを消してMotor6Dを元に戻し、体を少し持ち上げて起こす処理 |
root:SetNetworkOwner(Players:GetPlayerFromCharacter(character)) | 体の動きの計算を、遊ぶ人のパソコンへ戻す |
busy[player] | 倒れている間と、起き上がってから2秒の間は、もう一度倒れないようにする目印 |
task.wait(2) | 起き上がってから、また倒れるようになるまでの2秒を待つ |
humanoid.BreakJointsOnDeath = false | 体力が0になったときに体がバラバラにならないようにする。最初はオンになっている |
humanoid.Health = 0 | 体力を0にする |
4. テストで倒れる
黄色の床
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。
- Wキーで前へ歩き、Aキー・Dキーで左右を合わせて、黄色の床の手前まで進みます(下の1枚目)
- Wキーで床に向かって歩き、床に触れたらWキーを離します。キャラクターがぐにゃっと倒れます(下の2枚目)
- そのまま待つと、DOWN_TIMEで決めた3秒後に起き上がります(下の3枚目)
以下は、アソビシフト編集部が試した結果です。起き上がると、また歩けました。起き上がって2秒たつと、黄色の床の上を歩いたときにまた倒れました。また倒れたときは、3秒待って起き上がってから、次の操作をします。
赤い床
黄色の床の上で起き上がったら、続けて赤い床を試します。
- Dキーを押し続けて右へ歩きます。赤い床に触れると体力が0になり、キャラクターが倒れます。画面の右上の体力の表示は灰色になります(下の1枚目)
- そのまま待つと、スタートの台の上で復活します(下の2枚目)
以下は、アソビシフト編集部が試した結果です。体力が0になってから3秒ほどで、スタートの台の上に復活しました。
確かめ終わったら、Shift + F5キーでテストを停止します。
5. 完成した2つの床
テストを止めたあとの3D画面です。左が黄色のFallPad、右が赤いKillPadです。

6. 倒れないときに確かめる所
以下は、アソビシフト編集部が設定とコードを1か所ずつ変えて、黄色の床で試した結果です。なぜその行が要るのかも分かります。この節は読むだけで大丈夫です。
| 変えた所 | 結果 | 直し方 |
|---|---|---|
| 何も変えない | 黄色の床の上に倒れる(下の1枚目) | |
コードの root:SetNetworkOwner(nil) の行を消した | 床の上に残らず、手前の地面に倒れる(下の2枚目) | 記事のコードを全部貼り直す |
コードの part.CanCollide = true の行を、何もしない行に変えた | 床の上に残らず、手前の地面に倒れる(下の3枚目) | 記事のコードを全部貼り直す |
| FallPadの名前を「Part」のままにした | 黄色の床に乗っても倒れない(下の4枚目) | エクスプローラでPartを押してF2キーを押し、名前を「FallPad」に変えてEnterキーを押す |
関節が曲がる角度も試しました。エクスプローラでServerScriptServiceの中の「RagdollScript」をダブルクリックして開き、コードの7行目の BEND_ANGLE の「60」を10と170に書きかえたときの結果です。平らな床の上では、10と60の見た目の差は小さくなりました。
| BEND_ANGLE | 結果 |
|---|---|
| 10 | 黄色の床の上に倒れる(下の1枚目) |
| 60 | 10のときとほとんど同じ形で倒れる(下の2枚目) |
| 170 | 関節が大きく曲がり、上半身を起こしたまま床の手前に崩れる(下の3枚目) |
AIに相談するときの伝え方
Roblox Studioでラグドールを作っています。
ServerScriptService の Script で、キャラクターの Motor6D を止めて BallSocketConstraint を入れ、HumanoidRootPart を SetNetworkOwner(nil) にして、humanoid.PlatformStand を true にしています。
車にぶつかったときにもラグドールにしたいです。どう書き足せばよいですか。
よくある質問
倒れている時間を変えたいときは?
エクスプローラでServerScriptServiceの中の「RagdollScript」をダブルクリックして開き、コードの6行目の DOWN_TIME の「3」を書きかえます。
配布のラグドールも使える?
Creator Store(Robloxの部品を配っている場所)には、ラグドールのモジュール(まとめられたスクリプト)もあります。この記事のコードは本文に全部載せているので、倒れる条件や起き上がり方を読みながら書きかえられます。
次は、溶接ボタンとスクリプトで部品をくっつけ、ロボットと帽子を作ります。次のステップ(上級 21/40)
次に知りたいことを選ぶ
- 次のステップ:溶接ボタンとスクリプトで部品をくっつけ、ロボットと帽子を作ります → ロブロックス(Roblox)スタジオの溶接のやり方
- ロープやばねで物を動かしたい → ロブロックス(Roblox)スタジオのロープの作り方
- 空を飛ぶ乗り物を作りたい → ロブロックス(Roblox)スタジオの飛行機の作り方
- 同じ処理を1つにまとめたい → ロブロックス(Roblox)のモジュールスクリプトの使い方




























