「剣やドリンクのように、手に持って使えるアイテムを作りたい」「拾ったアイテムをクリックしたら何か起きるようにしたい」
ロブロックス(Roblox)スタジオで手に持てるアイテム(ツール)を作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。ここでは、クリックすると5秒だけ速く走れる青いドリンクを作り、触ると1人1本もらえる台を置くところまで進めます。アバターの服やアクセサリーの作り方とは別の話です。
中級ステップ11/28 前の記事:ロブロックス(Roblox)で追いかけてくる敵の作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。パーツやスクリプトの入れ方はオビーの作り方で画像付きで解説しています。
今回の完成状態:下の画像のように、アバターが青いドリンクを右手に持ち(画像の1)、画面の下の欄に「SpeedDrink」(画像の2)が出れば成功です。

1. Toolを入れる
手に持てるアイテムは「Tool(ツール)」という部品で作ります。新しいBaseplateを開き、エクスプローラのWorkspaceの「+」を押して、検索欄に「Tool」と入れ、一覧の「Tool」(赤い枠)を押します。

エクスプローラでF2キーを押し、名前を「SpeedDrink」に変えます(赤い枠)。この名前が、画面の下の欄にそのまま出ます。

2. 手に持つ部分「Handle」を入れる
エクスプローラのSpeedDrinkにマウスを乗せて「+」を押し、「Part」(赤い枠)を入れます。

エクスプローラでF2キーを押し、入れたPartの名前を「Handle」に変えます。名前は大文字のHで始まる「Handle」にします。Robloxの公式の説明によると、Toolの中の「Handle」という名前のパーツが、アバターの右手に持たれる部分になります。
エクスプローラでHandleを選んだ状態で、プロパティの検索欄に「Size」と入力し、Sizeを「1, 1.6, 1」にしてEnterキーを押します(赤い枠)。

続けてHandleを選んだまま、プロパティの検索欄に「Color」と入力します。BrickColorとColorの2つが並ぶので、下の名前がちょうど「Color」の欄に「0, 120, 255」と入れてEnterキーを押します。ドリンクが青くなります(赤い枠)。

Toolには位置の欄がないので、置く場所はHandleで決めます。Handleを選んだままプロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「0, 1, -8」にしてEnterキーを押すと、ドリンクがスポーン地点の前に出ます(赤い枠)。

エクスプローラのSpeedDrinkの中に「Handle」があり(画像の1)、プロパティのAnchoredにチェックが入っていないことも確かめます(画像の2)。3D画面に青いドリンクが立っています(画像の3)。固定されていると、持って歩けません。

ここまでで、SpeedDrinkはスポーン地点の前(Position 0, 1, -8)に置かれています。
3. 名前の説明と、落とせない設定にする
エクスプローラでSpeedDrink(Tool)を選んだ状態で、プロパティの検索欄に「ToolTip」と入力します。ToolTipの欄に「クリックで5秒速く走れる」と入れてEnterキーを押します(赤い枠)。画面の下の欄にマウスを乗せたときに出る説明です。

SpeedDrinkを選んだまま、プロパティの検索欄に「CanBeDropped」と入力し、CanBeDroppedの右の四角を押してチェックを外します(赤い枠)。チェックが入っていると、手に持っているときにBackspaceキーを押すと、アイテムを地面に落としてしまいます。

| プロパティ | 初期値 | この記事の値 | 意味 |
|---|---|---|---|
| ToolTip | 空 | クリックで5秒速く走れる | 下の欄にマウスを乗せたときの説明 |
| CanBeDropped | オン | オフ | Backspaceキーで落とせるか |
| RequiresHandle | オン | オン(そのまま) | 手に持つ部分(Handle)が必要か |
4. クリックで速くなるスクリプトを入れる
エクスプローラのServerScriptServiceにマウスを乗せて「+」を押し、一覧の「Script」を押します。
エクスプローラにできた「Script」を選んだ状態でF2キーを押し、「SpeedDrinkEffect」と入力してEnterキーを押します。
続けてSpeedDrinkEffectを選んだまま、プロパティの検索欄に「RunContext」と入れて、「▼動作」の欄にあるRunContextの一覧から「Server」を選びます(赤い枠)。RunContextは、スクリプトをサーバーとプレイヤーのどちらで動かすかを決める設定です。

エクスプローラのSpeedDrinkEffectをダブルクリックして開き、中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local TOOL_NAME = "SpeedDrink" -- 道具の名前(Tool の名前と同じにする)
local FAST_SPEED = 32 -- 飲んだあとの速さ
local NORMAL_SPEED = 16 -- ふだんの速さ(最初の設定は16)
local EFFECT_SECONDS = 5 -- 速くなっている秒数
-- 道具1本ごとに、クリックしたときの動きをつける
local function setupTool(tool)
-- 同じ道具に2回つけないように印を見る
if tool:GetAttribute("Ready") then return end
tool:SetAttribute("Ready", true)
tool.Activated:Connect(function()
if not tool.Enabled then return end -- 効いている間は使えない
local character = tool.Parent
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if not humanoid or humanoid.Health <= 0 then return end
tool.Enabled = false
print(tool.Parent.Name .. " がドリンクを飲みました")
humanoid.WalkSpeed = FAST_SPEED
task.wait(EFFECT_SECONDS)
humanoid.WalkSpeed = NORMAL_SPEED
tool.Enabled = true
end)
end
-- 道具を手に持つと、道具はキャラクターの中に移る。そのときに準備する
local function onCharacterAdded(character)
character.ChildAdded:Connect(function(child)
if child:IsA("Tool") and child.Name == TOOL_NAME then
setupTool(child)
end
end)
end
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(onCharacterAdded)
end)

| コードの部分 | していること |
|---|---|
| character.ChildAdded | アイテムを手に持つと、アイテムはキャラクターの中に移る。そのときに準備する |
| 印(Ready) | 持ち替えるたびに準備が重ならないようにする |
| tool.Activated | 手に持ってクリックしたときに動く |
| tool.Enabled = false | 効いている間は、もう一度使えないようにする |
効き目のスクリプトは、Toolの中ではなくServerScriptServiceに置きます。5秒待っている間に持ち替えても、止まらずに速さを元に戻せるからです。
5. テストで拾って使う
3D画面の上の作品のタブ「Place6」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。置いてあるドリンクに歩いて触ると、アバターが右手に持ちます(画像の1)。画面の下の欄に「SpeedDrink」が入ります(画像の2)。数字キーの1を押すと、手に持つ・しまうを切りかえられます。

以下は、アソビシフト編集部がテストで確かめた結果です。手に持ったまま画面をクリックすると、ドリンクを飲んでFAST_SPEEDで決めた32の速さで走れるようになり、EFFECT_SECONDSで決めた5秒たつと、NORMAL_SPEEDの16に戻りました。出力には「(アカウント名)がドリンクを飲みました」と出ます(赤い枠)。速くなっている5秒の間は、何度クリックしても「ドリンクを飲みました」は1回しか出ませんでした。5秒たつと、もう一度飲めます。

Shift + F5キーでテストを停止します。
6. 触るともらえる台を作る
置いておくのではなく、台に触った人に1本ずつ配るようにします。エクスプローラのSpeedDrinkをマウスでつかんで、押したまま下の「ServerStorage」の上まで動かします。ServerStorageの行に枠が出たら(赤い枠)、マウスを離します。

ServerStorageの左に三角が付き、その中にSpeedDrinkが入れば移せています(赤い枠)。
ServerStorageの中のものは、遊ぶ人からは見えません。
エクスプローラのWorkspaceにマウスを乗せて「+」を押し、一覧の「Part」を押します。
エクスプローラにできた「Part」を選んだ状態でF2キーを押し、「DrinkGiver」と入力してEnterキーを押します(画像の1)。
続けてDrinkGiverを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeを「4, 1, 4」にしてEnterキーを押します(画像の2)。

DrinkGiverを選んだまま、プロパティの検索欄に「Position」と入力し、CFrameの下のPositionを「0, 0.5, -12」にしてEnterキーを押します(赤い枠)。

DrinkGiverを選んだまま、プロパティの検索欄に「BrickColor」と入力します。BrickColorの欄を押すと色の一覧が出るので、緑の「Bright green」を押します(赤い枠)。

DrinkGiverを選んだまま、プロパティの検索欄に「Anchored」と入力し、Anchoredにチェックを入れて固定します(赤い枠)。

エクスプローラのServerScriptServiceにマウスを乗せて「+」を押し、一覧の「Script」を押します。
エクスプローラにできた「Script」を選んだ状態でF2キーを押し、「DrinkGiver」と入力してEnterキーを押します(画像の1)。台のPartと同じ名前ですが、こちらはServerScriptServiceの中のScriptです。
続けてScriptのDrinkGiverを選んだまま、プロパティの検索欄に「RunContext」と入力し、RunContextの一覧から「Server」を選びます(画像の2)。

ここまでで、ServerScriptServiceに2つのScript(画像の1)、ServerStorageにSpeedDrink(画像の2)、Workspaceに緑の台(画像の3)がそろいます。

エクスプローラのServerScriptServiceの中のDrinkGiverをダブルクリックして開き、中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local template = ServerStorage:WaitForChild("SpeedDrink") -- 配る元の道具
local giver = workspace:WaitForChild("DrinkGiver") -- 触る台
-- もう持っているか(下の欄の中と、手に持っている分の両方を見る)
local function hasTool(player)
local backpack = player:FindFirstChildOfClass("Backpack")
if backpack and backpack:FindFirstChild(template.Name) then return true end
local character = player.Character
if character and character:FindFirstChild(template.Name) then return true end
return false
end
giver.Touched:Connect(function(hit)
-- 触れたのがプレイヤーのキャラクターか確かめる
local character = hit.Parent
local player = Players:GetPlayerFromCharacter(character)
if not player then return end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid or humanoid.Health <= 0 then return end
if hasTool(player) then return end
local backpack = player:FindFirstChildOfClass("Backpack")
if not backpack then return end
template:Clone().Parent = backpack
end)

画面の下の欄は「Backpack(バックパック)」といいます。手に持っているアイテムは、Backpackからキャラクターの中に移ります。そのため、両方を見てから配らないと、手に持ったまま台に乗るたびに増えてしまいます。
7. テストで1本だけもらえるか確かめる
3D画面の上の作品のタブ「Place6」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。以下は、アソビシフト編集部がテストで確かめた結果です。緑の台に乗ると、画面の下の欄にSpeedDrinkが入ります(画像の1)。何度乗り直しても、下の欄のSpeedDrinkは1つのままで、増えませんでした。

数字キーの1で手に持ったまま台に乗っても、下の欄のSpeedDrinkは1つのままで(赤い枠)、Backspaceキーを押しても落ちませんでした。

最後に、アバターを倒して生き返らせます。Escキーを押してロブロックスのメニューを開き、下の「リスポーン」を押します。「キャラクターをリスポーンしてよろしいですか?」と出たら、「リスポーン」を押します。生き返ると、画面の下の欄からSpeedDrinkがなくなっていました。Robloxの公式の説明によると、倒れるとBackpackは作り直され、StarterPackとStarterGearの中身だけが入ります。台でもらったアイテムは消えるので、もう一度台に乗ってもらいます。

手に持つ位置を直す(Grip)
アイテムが手に深く刺さって見える、持つ場所を少しずらしたい、というときは、ToolのプロパティのGripで直します。テスト中なら、先にShift + F5キーでテストを停止します。
エクスプローラの「ServerStorage」の左の三角を押して開き、中のSpeedDrink(Tool)を押して選びます。プロパティの検索欄に「Grip」と入れると、「Grip」の下に「Position」と「Orientation」が出ます。最初はどちらも「0, 0, 0」です。PositionはHandleのどこを手で持つか、Orientationは持ったときの傾きです。

試しに、SpeedDrinkを選んだまま(画像の1)、Gripの下のPositionを「0, 0.5, 0」にしてEnterキーを押します(画像の2)。

3D画面の上の作品のタブ「Place6」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。緑の台に乗ってドリンクをもらい、数字キーの1で手に持つと、持つ場所がHandleの上のほうにずれて、ドリンクが手より下に下がりました。下の2枚は、同じ向きから見たところです。


数を少しずつ変えてテストし、見た目のよい所を探します。確かめたら、Shift + F5キーでテストを停止します。
元の持ち方に戻すときは、ServerStorageの中のSpeedDrinkを選んだまま、プロパティの検索欄に「Grip」と入力し、Gripの下のPositionを「0, 0, 0」にしてEnterキーを押します。
持っているときだけキーを使えるようにする
「アイテムを持っているときだけ、Qキーで特別な動きをする」ようにもできます。キーを調べられるのはプレイヤーのパソコンで動くスクリプトだけなので、ここではLocalScriptを使います。
エクスプローラの「ServerStorage」の中のSpeedDrinkにマウスを乗せて「+」を押し、検索欄に「LocalScript」と入れて「LocalScript」を押します。SpeedDrinkをServerStorageに移したあとでも、SpeedDrinkの中に入れれば同じように動きます。
エクスプローラにできた「LocalScript」を選んだ状態でF2キーを押し、「DrinkKey」と入力してEnterキーを押します(赤い枠)。
DrinkKeyをダブルクリックして開き、中身を全部消して、次のコードを貼り付けます。
local ContextActionService = game:GetService("ContextActionService")
local tool = script.Parent
local ACTION_NAME = "CheckDrink"
-- Qキーを押したときの動き
local function onAction(actionName, inputState)
if actionName == ACTION_NAME and inputState == Enum.UserInputState.Begin then
print("ドリンクを持っているので、Qキーが使えます")
end
end
-- 手に持ったときだけ、Qキーを使えるようにする
tool.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_NAME, onAction, true, Enum.KeyCode.Q)
end)
-- しまったら、Qキーを使えなくする
tool.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_NAME)
end)

| コードの部分 | していること |
|---|---|
tool.Equipped | アイテムを手に持ったときの合図。ここでQキーを使えるようにする |
tool.Unequipped | アイテムをしまったときの合図。ここでQキーを使えなくする |
BindAction(..., true, Enum.KeyCode.Q) | Qキーを押したらonActionを動かす。3つ目のtrueは、スマホなどのタッチ画面用のボタンを作るかどうかの指定(Robloxの公式の説明より) |
3D画面の上の作品のタブ「Place6」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。緑の台に乗ってドリンクをもらい、数字キーの1で手に持ちます。
以下は、アソビシフト編集部がテストで確かめた結果です。ドリンクを持ってQキーを押すと、出力に「ドリンクを持っているので、Qキーが使えます」と1行出ました(画像の1)。続けて1キーでドリンクをしまい(画像の2)、もう一度Qキーを押しても、何も出ませんでした。

確かめたら、Shift + F5キーでテストを停止します。
printの行を、エフェクトを出す・音を鳴らすなどに書きかえると、持っているアイテムごとに違うキーの動きを作れます。
アイテムを置く場所で何が変わるか
| 置く場所 | どうなるか | 向いている使い方 |
|---|---|---|
| Workspace | 触った人が拾って手に持つ。1人が拾うとなくなる | 落ちているアイテム |
| StarterPack | 全員が、生き返るたびに最初から持っている | 全員が使う基本の道具 |
| ServerStorage+配るスクリプト | 決めた条件で配れる。倒れると消える | 台でもらう、お店で買う |
| プレイヤーごとのStarterGear | その人だけ、生き返っても持っている | 買ったアイテムを持ち続けさせる |
StarterGearは、遊んでいる人ごとに、Playersの中のその人の中に作られる入れ物です。生き返るたびに、中身がBackpackに入ります。編集中のエクスプローラには出てこないので、スクリプトから入れます。
持てない・効かないときの確かめ方
| 症状 | 見るところ | 直し方 |
|---|---|---|
| 触っても拾えない | Handleの名前 | Toolのすぐ下に「Handle」という名前のPartがあるか(大文字のH) |
| 拾うとアバターが動かない | HandleのAnchored | チェックを外す |
| クリックしても何も起きない | スクリプトの場所 | ServerScriptServiceにあり、RunContextがServerか |
| クリックしても何も起きない | Toolの名前 | TOOL_NAMEとToolの名前が同じか |
| 台に乗るたびに増える | 本数の数え方 | Backpackとキャラクターの中の両方を見る |
| Backspaceで落ちてしまう | CanBeDropped | チェックを外す |
AIに相談するときの伝え方
Roblox Studioで、Tool「SpeedDrink」を手に持ってクリックすると、5秒だけWalkSpeedを32にしたいです。
ServerScriptServiceのScriptで、Tool.Activatedを受け取ってください。
効いている間はTool.Enabledをfalseにして連打できないようにし、5秒後に16に戻してください。
よくある質問
アイテムに絵(アイコン)を付けられる?
付けられます。Robloxの公式の説明によると、ToolのTextureIdに画像のアセットIDを入れると、下の欄にその絵が出ます。この記事のテストではTextureIdを空のままにしたので、下の欄にはToolの名前(SpeedDrink)が出ました。
お金で買ったアイテムを持ち続けさせたい
ゲームパスを持っている人だけに配るなら、ゲームパスの作り方と同じように、持っているかを確かめてから、その人のStarterGearに入れます。
次は、剣で攻撃できるようにします。次のステップ(中級 12/28)
次に知りたいことを選ぶ
- 次のステップ:剣で攻撃できるようにします → ロブロックス(Roblox)スタジオで剣の攻撃を作る方法
- アイテムを売りたい → ロブロックス(Roblox)のゲームパスの作り方
- クリックした場所をサーバーに伝えたい → ロブロックス(Roblox)のRemoteEventの使い方
- 拾うとコインが増える仕掛けも作りたい → ロブロックス(Roblox)でコイン集めゲームを作る方法