ロブロックス(Roblox)のラグドールとは?スタジオでぐにゃっと倒れる作り方を画像で解説

制作手順難易度: 上級所要時間: 約40分(目安)情報確認日: 2026年10月31日

「ロブロックスのラグドールって何?」「キャラクターがぐにゃっと倒れる動きを、自分のゲームに入れたい」

ロブロックス(Roblox)のラグドールとは何かと、スタジオでの作り方を、実際の画像付きで誰でも簡単に分かるように解説します。配布モデルは使わず、「+」で入れた部品とスクリプトだけで作ります。触れると倒れて起き上がる黄色の床と、触れると倒れたまま復活する赤い床を動かします。

上級ステップ20/40 前の記事:ロブロックス(Roblox)スタジオのロープの作り方 全体の順番を見る

使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。2つの部品を結ぶ印(Attachment)はロープの作り方でも使いました。

先に答え

知りたいこと答え
ラグドールとは?キャラクターの体の力が抜けて、重力やぶつかる力でぐにゃっと倒れる状態のこと。倒れ方は、そのときの向きや勢いで毎回少し変わる
どうやって作る?体の関節(Motor6D)を止めて、代わりにBallSocketConstraint(自由に回る関節)を入れる
倒れたあと起き上がるには?入れた部品を消して、関節(Motor6D)を元に戻す
体力が0のときも倒れるには?体がバラバラにならないよう、BreakJointsOnDeathをオフにしてからラグドールにする

今回の完成状態:黄色の床に触れると、下の画像のようにキャラクターがぐにゃっと倒れます。3秒後に起き上がり、また歩ければ成功です。

作るもの

名前種類置く場所役目
FallPadPartWorkspace触れると倒れて、3秒後に起き上がる黄色の床
KillPadPartWorkspace触れると体力が0になり、倒れたまま復活を待つ赤い床
RagdollScriptScriptServerScriptService床に触れた人をラグドールにする

1. 黄色の床を作る

この記事の画像は、床が見やすい位置までカメラを動かして撮っています。「+」で入れたPartは、実際の画面ではスタートの台(ゲームを始める場所の板)の上あたりに見えます。Positionを入れた床が3D画面に見えないときは、エクスプローラでその床を押して選び、3D画面にマウスを乗せてFキーを押します。BrickColorの名前が見た目の色と違うことがありますが、Colorの数字が合っていれば大丈夫です。

新しいBaseplateを開きます。エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。画像の赤い枠は、その説明で押す場所や見る場所を示しています。画像を押すと大きく表示できます。

プロパティ値理由
Size10, 1, 10歩いて乗れる広さの床にする
Position(▼CFrameのすぐ下)-10, 0.5, -25スタートの台の左奥に置く
Color240, 200, 0黄色にする(BrickColorは「Deep orange」になる)
Anchoredチェックを入れる床が動かないように固定する
  1. 一覧の検索欄に「Part」と入れて、一覧の「Part」を押します(下の1枚目)
  2. エクスプローラでPartを選んだままF2キーを押し、名前を「FallPad」に変えてEnterキーを押します(下の2枚目)
  3. FallPadを選んだまま、プロパティの検索欄に「Size」と入れ(前の文字が残っているときは消してから入れます)、名前がちょうど「Size」の欄に「10, 1, 10」と入れてEnterキーを押します(下の3枚目)
  4. 続けてFallPadを選んだまま、検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「-10, 0.5, -25」と入れてEnterキーを押します(下の4枚目)
  5. 続けてFallPadを選んだまま、検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「240, 200, 0」と入れ、Enterキーを押します(下の5枚目)
  6. 続けてFallPadを選んだまま、検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)

2. 赤い床を作る

プロパティ値理由
Size10, 1, 10黄色の床と同じ広さにする
Position(▼CFrameのすぐ下)10, 0.5, -25スタートの台の右奥に置く
Color200, 0, 0赤にする(BrickColorは「Crimson」になる)
Anchoredチェックを入れる床が動かないように固定する
  1. エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します(下の1枚目)
  2. エクスプローラでPartを選んだままF2キーを押し、名前を「KillPad」に変えてEnterキーを押します(下の2枚目)
  3. KillPadを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「10, 1, 10」と入れてEnterキーを押します(下の3枚目)
  4. 続けてKillPadを選んだまま、検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「10, 0.5, -25」と入れてEnterキーを押します(下の4枚目)
  5. 続けてKillPadを選んだまま、検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「200, 0, 0」と入れ、Enterキーを押します(下の5枚目)
  6. 続けてKillPadを選んだまま、検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)

3. ラグドールのスクリプトを入れる

スクリプトの置き場所

ServerScriptServiceは、全員に共通の処理を動かすスクリプト(サーバーのスクリプト)を入れる場所です。エクスプローラのWorkspaceより下の行にあります。

  1. エクスプローラを下へスクロールして「ServerScriptService」にマウスを乗せ、「+」を押します。一覧の検索欄に「Script」と入れて「Script」を押します(下の1枚目)
  2. スクリプトの画面が開きます。エクスプローラの「Script」を1回押してからF2キーを押し、名前を「RagdollScript」に変えてEnterキーを押します(下の2枚目)
  3. 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 = falseMotor6Dを止める
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キーでテストを始めます(タブの名前はパソコンによって違います)。

  1. Wキーで前へ歩き、Aキー・Dキーで左右を合わせて、黄色の床の手前まで進みます(下の1枚目)
  2. Wキーで床に向かって歩き、床に触れたらWキーを離します。キャラクターがぐにゃっと倒れます(下の2枚目)
  3. そのまま待つと、DOWN_TIMEで決めた3秒後に起き上がります(下の3枚目)

以下は、アソビシフト編集部が試した結果です。起き上がると、また歩けました。起き上がって2秒たつと、黄色の床の上を歩いたときにまた倒れました。また倒れたときは、3秒待って起き上がってから、次の操作をします。

赤い床

黄色の床の上で起き上がったら、続けて赤い床を試します。

  1. Dキーを押し続けて右へ歩きます。赤い床に触れると体力が0になり、キャラクターが倒れます。画面の右上の体力の表示は灰色になります(下の1枚目)
  2. そのまま待つと、スタートの台の上で復活します(下の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枚目)
6010のときとほとんど同じ形で倒れる(下の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)スタジオの溶接のやり方

次に知りたいことを選ぶ

次に読む記事