「ロブロックスで、同じことをするスクリプトをいくつも書いていて、直すたびに全部を書きかえるのが大変」「ModuleScriptとrequireの使い方が分からない」
ロブロックス(Roblox)スタジオのモジュールスクリプト(ModuleScript)の使い方を、実際の画像付きで誰でも簡単に分かるように解説します。ここでは、コインを渡す仕組みを1つのModuleScriptにまとめ、小さいコイン・大きいコイン・宝箱の3つのスクリプトから呼び出します。コインの数を1か所で変えると、3つ全部の動きが変わります。
上級ステップ16/40 前の記事:ロブロックス(Roblox)スタジオのテキストボックスの使い方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。スクリプトの入れ方はスクリプトの読み方、右上の一覧(leaderstats)はコイン集めゲームの作り方で解説しています。
先に答え
| 知りたいこと | 答え |
|---|---|
| モジュールスクリプトとは | ほかのスクリプトから呼び出して使う、関数や数をまとめておくスクリプト。それだけでは動かない |
| どうやって呼び出す? | 使う側のスクリプトで require(ModuleScriptの場所) と書く。返ってきた表の中の関数を 名前.関数名() で使う |
| どこに置く? | サーバーのスクリプトだけが使うならServerScriptService、LocalScriptからも使うならReplicatedStorage(公式の説明) |
| 何がうれしい? | 同じ処理を1か所に書けるので、直すときはModuleScriptだけを書きかえればよい |
今回の完成状態:下の画像のように、小さいコイン・大きいコイン・宝箱に触れると、右上の「Coins」がそれぞれの数だけ増えれば成功です。

作るものと流れ
| 名前 | 種類 | 置く場所 | 役目 |
|---|---|---|---|
| SmallCoin | Part | Workspace | 小さいコイン。触れると1枚 |
| BigCoin | Part | Workspace | 大きいコイン。触れると5枚 |
| Chest | Part | Workspace | 宝箱。触れると20枚 |
| CoinManager | ModuleScript | ServerScriptService | コインの数の表と、コインを渡す関数をまとめる。右上の一覧(Coins)も作る |
| PickupScript | Script | SmallCoin・BigCoin・Chestの中に1つずつ | 触れられたらCoinManagerを呼ぶ |
3つのPickupScriptは、中身がほとんど同じです。違うのは、どの種類のコインかを決める1行だけです。コインを渡す細かい処理は全部CoinManagerに書くので、3つのスクリプトは短くて済みます。
1. コインと宝箱を置く
小さいコイン(SmallCoin)
新しいBaseplateを開きます。エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「Part」と入れて、一覧の「Part」を押します(赤い枠)。

Workspaceの中にPartが入ります。エクスプローラでPartを選んだままF2キーを押し、名前を「SmallCoin」に変えます(赤い枠)。

続けてSmallCoinを選んだまま、次の8つのプロパティを1つずつ変えます。
| プロパティ | 値 | 理由 |
|---|---|---|
| Shape | Cylinder(一覧から選ぶ) | 円柱にする |
| Size | 0.4, 2.5, 2.5 | 薄くて丸いコインの形にする(1つ目の数が厚さ) |
| Orientation(▼CFrameのすぐ下) | 0, 90, 0 | 丸い面を画面の手前へ向ける |
| Position(▼CFrameのすぐ下) | -6, 3, -12 | スタートの台の奥の左に浮かべる |
| Color | 255, 200, 0 | 金色にする |
| Material | Neon(一覧から選ぶ) | 光って見えるようにする |
| Anchored | チェックを入れる | テストで落ちないように固定する |
| CanCollide | チェックを外す | ぶつからずに通り抜けて触れるようにする |
- プロパティの検索欄に「Shape」と入れ、右の「Block」を押して開く一覧から「Cylinder」を押します(下の1枚目)
- 検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「0.4, 2.5, 2.5」と入れてEnterキーを押します(下の2枚目)
- 検索欄に「Orientation」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のOrientationに「0, 90, 0」と入れてEnterキーを押します。横を向いていたコインの丸い面が、画面の手前を向きます(下の3枚目)
- 検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「-6, 3, -12」と入れてEnterキーを押します(下の4枚目の1)。コインがスタートの台の奥の左に浮かびます(下の4枚目の2)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「255, 200, 0」と入れ、Enterキーを押します(下の5枚目)
- 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Neon」を押します(下の6枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の7枚目)
- 検索欄に「CanCollide」と入れ、2つ並ぶうちの上、名前がちょうど「CanCollide」の欄の右の四角を押してチェックを外します(下の8枚目)
大きいコイン(BigCoin)
大きいコインは、SmallCoinを複製して作ります。Shape・Orientation・Color・Material・Anchored・CanCollideは、複製するとSmallCoinと同じ値になるので変えません。変えるのは次の3つです。
| 変える所 | 値 |
|---|---|
| 名前 | BigCoin |
| Size | 0.6, 4, 4 |
| Position(▼CFrameのすぐ下) | 0, 3.5, -12 |
- エクスプローラで「SmallCoin」を押して選び、Ctrl + Dキーを押します。同じ場所に複製ができ、複製したほうが選ばれた状態になります
- エクスプローラでそのままF2キーを押し、名前を「BigCoin」に変えます(下の1枚目)
- BigCoinを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「0.6, 4, 4」と入れてEnterキーを押します(下の2枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「0, 3.5, -12」と入れてEnterキーを押します(下の3枚目の1)。SmallCoinの右に、ひとまわり大きいコインが浮かびます(下の3枚目の2)
宝箱(Chest)
宝箱は、新しいPartで作ります。
| プロパティ | 値 | 理由 |
|---|---|---|
| Size | 3, 2, 2 | 横長の箱にする |
| Position(▼CFrameのすぐ下) | 6, 1, -12 | 大きいコインの右の地面に置く |
| Color | 140, 80, 30 | 茶色にする |
| Material | Wood(一覧から選ぶ) | 木の箱に見せる |
| Anchored | チェックを入れる | 固定する |
| CanCollide | チェックを外す | 通り抜けて触れるようにする |
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します
- エクスプローラでPartを選んだままF2キーを押し、名前を「Chest」に変えます(下の1枚目)
- Chestを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「3, 2, 2」と入れてEnterキーを押します(下の2枚目)
- 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「6, 1, -12」と入れてEnterキーを押します(下の3枚目の1)。大きいコインの右の地面に箱が置かれます(下の3枚目の2)
- 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「140, 80, 30」と入れ、Enterキーを押します(下の4枚目)
- 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Wood」を押します(下の5枚目)
- 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)
- 検索欄に「CanCollide」と入れ、2つ並ぶうちの上、名前がちょうど「CanCollide」の欄の右の四角を押してチェックを外します(下の7枚目)
スタートの台の前に、左から小さいコイン(画像の1)、大きいコイン(画像の2)、宝箱(画像の3)が並べば準備はできています。

2. コインを渡すModuleScriptを書く
ModuleScriptを入れる
エクスプローラの「ServerScriptService」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

一覧の検索欄に「ModuleScript」と入れて、一覧の「ModuleScript」を押します(赤い枠)。ModuleScriptは、紫色のアイコンの付いたスクリプトです。

ServerScriptServiceの中にModuleScriptが入り、スクリプトの画面が開きます。最初は次の2行が、あいだを1行あけて入っています(赤い枠)。

| 最初の行 | していること |
|---|---|
local module = {} | 空の表(いろいろな物を入れておく入れ物)を作る |
return module | その表を、呼び出したスクリプトに渡す |
ModuleScriptに書いた関数や数は、この表に入れて return で渡します。渡した物だけが、ほかのスクリプトから使えます。
エクスプローラで「ModuleScript」を押して選び、F2キーを押して名前を「CoinManager」に変えます(赤い枠)。この名前は、あとで呼び出すときに使います。

CoinManagerのコードを貼り付ける
3D画面の上のタブ「CoinManager」を押して、スクリプトの画面を出します。中身を全部消して、次のコードを貼り付けます(コードの画面の中を押してからCtrl + Aキーで全部選び、Deleteキーで消します)。
local Players = game:GetService("Players")
local CoinManager = {}
-- コインの種類ごとの枚数。ここを書きかえると、全部のアイテムの枚数が変わる
local COIN_VALUES = {
small = 1,
big = 5,
chest = 20,
}
print("CoinManager を読み込みました")
-- 右上の一覧に「Coins」の欄を作る(このModuleScriptの中だけで使う関数)
local function setupPlayer(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Parent = leaderstats
end
Players.PlayerAdded:Connect(setupPlayer)
for _, player in Players:GetPlayers() do
setupPlayer(player)
end
-- 触れた部品から人を探して、決まった枚数のコインを足す(ほかのスクリプトから使う関数)
function CoinManager.give(hit, kind)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if not player then
return false
end
local amount = COIN_VALUES[kind]
player.leaderstats.Coins.Value += amount
print(kind, "のコインを", amount, "枚渡しました")
return true
end
return CoinManager

| コードの部分 | していること |
|---|---|
local CoinManager = {} と return CoinManager | 最初の module を、役目が分かる名前に変えた(公式の説明では、表の名前は役目が分かる名前で、頭を大文字にする)。ここではModuleScriptの名前と同じ「CoinManager」にそろえた |
local COIN_VALUES | コインの種類と枚数の表。local を付けたので、このModuleScriptの中だけで使える |
local function setupPlayer | 右上の一覧を作る関数。local を付けたので、ほかのスクリプトからは呼べない |
Players.PlayerAdded:Connect(setupPlayer) | あとからゲームに入った人にも、右上の一覧を作る |
for _, player in Players:GetPlayers() do | CoinManagerが読み込まれる前から入っていた人にも、右上の一覧を作る。ModuleScriptは require されたときに初めて動くので、その時点でもう入っている人の分をここで作る |
function CoinManager.give(hit, kind) | 表の中に入れた関数。local を付けず、CoinManager. を前に付けたので、ほかのスクリプトから呼べる |
hit と kind | give を呼ぶときに渡される2つの値。hit は触れた部品、kind はPickupScriptから渡される種類("small" など) |
Players:GetPlayerFromCharacter(hit.Parent) | 触れた部品の親(アバター)から、その人を探す。アバター以外が触れたときは見つからないので、何もせずに終わる |
COIN_VALUES[kind] | 枚数の表から、種類に合う枚数を取り出す。kind が "big" なら5 |
Coins.Value += amount | 右上の一覧のCoinsに、取り出した枚数を足す |
return true と return false | コインを渡せたかどうかを、呼んだスクリプトに知らせる |
ほかのスクリプトから使う関数や数には local を付けず、表の名前とドット(.)を前に付けます。表に入れる物は、local CoinManager = {} と return CoinManager のあいだに書きます(どちらも、Robloxの公式の説明に書かれている決まりです)。
3. アイテムからCoinManagerを呼び出す
小さいコインにスクリプトを入れる
エクスプローラの「SmallCoin」にマウスを乗せて、右に出る「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します(赤い枠)。SmallCoinの中にScriptが入ります。

エクスプローラで入れたScriptを押して選び、F2キーを押して名前を「PickupScript」に変えます(赤い枠)。

3D画面の上のタブ「PickupScript」を押して、スクリプトの画面を出します。中身を全部消して、次のコードを貼り付けます。
local ServerScriptService = game:GetService("ServerScriptService")
-- CoinManager を呼び出して、中の表を受け取る
local CoinManager = require(ServerScriptService:WaitForChild("CoinManager"))
local item = script.Parent
local KIND = "small" -- このアイテムの種類(CoinManager の COIN_VALUES の名前と同じにする)
local used = false
item.Touched:Connect(function(hit)
if used then
return
end
if CoinManager.give(hit, KIND) then
used = true
item.Transparency = 1 -- 見えなくする
task.wait(5)
item.Transparency = 0 -- 5秒たったら、また見えるようにする
used = false
end
end)

| コードの部分 | していること |
|---|---|
require(ServerScriptService:WaitForChild("CoinManager")) | CoinManagerを動かして、return で渡された表を受け取る。WaitForChild は、CoinManagerが見つかるまで待つ |
local CoinManager = | 受け取った表に「CoinManager」という名前を付ける。この名前で、表の中の関数を使う |
local KIND = "small" | このアイテムの種類。CoinManagerの COIN_VALUES の名前と同じにする |
CoinManager.give(hit, KIND) | CoinManagerの中の give 関数を呼ぶ。コインを渡せたら true が返る |
used | 一度触れたら5秒のあいだは何もしない、という印。続けて何回も数えないようにする |
大きいコインと宝箱にも入れる
大きいコインと宝箱にも、同じようにPickupScriptを入れます。コードは小さいコインのものと7行目の種類だけが違います。
大きいコイン(BigCoin)
- エクスプローラの「BigCoin」にマウスを乗せて、右に出る「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します
- エクスプローラでBigCoinの中に入ったScriptを押して選び、F2キーを押して名前を「PickupScript」に変えます
- 開いているPickupScriptのタブと取り違えないよう、エクスプローラでBigCoinの中の「PickupScript」をダブルクリックして開きます。中身を全部消して、次のコードを貼り付けます。7行目が
local KIND = "big"になっています(赤い枠)
local ServerScriptService = game:GetService("ServerScriptService")
-- CoinManager を呼び出して、中の表を受け取る
local CoinManager = require(ServerScriptService:WaitForChild("CoinManager"))
local item = script.Parent
local KIND = "big" -- このアイテムの種類(CoinManager の COIN_VALUES の名前と同じにする)
local used = false
item.Touched:Connect(function(hit)
if used then
return
end
if CoinManager.give(hit, KIND) then
used = true
item.Transparency = 1 -- 見えなくする
task.wait(5)
item.Transparency = 0 -- 5秒たったら、また見えるようにする
used = false
end
end)

宝箱(Chest)
- エクスプローラの「Chest」にマウスを乗せて、右に出る「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します
- エクスプローラでChestの中に入ったScriptを押して選び、F2キーを押して名前を「PickupScript」に変えます
- 開いているPickupScriptのタブと取り違えないよう、エクスプローラでChestの中の「PickupScript」をダブルクリックして開きます。中身を全部消して、次のコードを貼り付けます。7行目が
local KIND = "chest"になっています(赤い枠)
local ServerScriptService = game:GetService("ServerScriptService")
-- CoinManager を呼び出して、中の表を受け取る
local CoinManager = require(ServerScriptService:WaitForChild("CoinManager"))
local item = script.Parent
local KIND = "chest" -- このアイテムの種類(CoinManager の COIN_VALUES の名前と同じにする)
local used = false
item.Touched:Connect(function(hit)
if used then
return
end
if CoinManager.give(hit, KIND) then
used = true
item.Transparency = 1 -- 見えなくする
task.wait(5)
item.Transparency = 0 -- 5秒たったら、また見えるようにする
used = false
end
end)

エクスプローラで、SmallCoin・BigCoin・Chestの中にPickupScriptが1つずつ入っていれば(3つの赤い枠)、組み立てはできています。

4. テストでコインを集める
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。
右上に「Coins」の一覧が出ていないときは、Tabキーを押すと出ます。コインに触れたら、すぐにコインから離れます。中に5秒以上いると、もう一度数えられます。
以下は、アソビシフト編集部が小さいコイン、大きいコイン、宝箱の順に触れて確かめた結果です。
テストを始めて小さいコインに触れると、コインが見えなくなり、右上のCoinsがCOIN_VALUESで決めた1枚になります(画像の1)。下の出力には「small のコインを 1 枚渡しました」と出ます(画像の2)。

続けて大きいコインに触れると、COIN_VALUESで決めた5枚が足されて、Coinsが6になります(画像の1)。出力には「big のコインを 5 枚渡しました」と出ます(画像の2)。

最後に宝箱に触れると、COIN_VALUESで決めた20枚が足されて、Coinsが26になります(画像の1)。出力には「chest のコインを 20 枚渡しました」と出ます(画像の2)。

触れたアイテムは5秒たつとまた見えるようになり、もう一度触れるとコインが増えます。出力のいちばん上の「CoinManager を読み込みました」は、テストを始めたときに1回だけ出ました。3つのPickupScriptがそれぞれ require しても、CoinManagerが動いたのは1回だけです。
確かめ終わったら、Shift + F5キーでテストを停止します。
5. 枚数を1か所で変える
ModuleScriptにまとめておくと、枚数を変えるときはCoinManagerだけを書きかえれば済みます。ここでは、小さいコインの枚数を1枚から2枚に変えてみます。PickupScriptは3つとも書きかえません。
3D画面の上のタブ「CoinManager」を押して、スクリプトの画面を出します。7行目の small = 1, の「1」を「2」に書きかえます(赤い枠)。

3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。テストを始めて小さいコインに触れると、Coinsが2になります(画像の1)。出力には「small のコインを 2 枚渡しました」と出ます(画像の2)。

Shift + F5キーでテストを停止し、CoinManagerの7行目を small = 1, に戻しておきます。
6. どこに置くと呼び出せる?(置き場所の早見表)
ModuleScriptは置いた場所によって、呼び出せるスクリプトが変わります。この節は読むだけで大丈夫です。作った作品には何も足しません。
ServerStorageはサーバーだけが使う物をしまっておく場所で、ReplicatedStorageはサーバーとプレイヤーのパソコンの両方から見える場所です。
以下は、アソビシフト編集部が中身の同じModuleScriptを3か所に置いて確かめた結果です。呼んだのは、ServerScriptServiceのScriptと、StarterPlayerの中のStarterPlayerScriptsに入れたLocalScriptです。
| ModuleScriptを置いた場所 | Script(サーバー)から | LocalScript(プレイヤーのパソコン)から |
|---|---|---|
| ServerScriptService | 呼べた | 呼べなかった |
| ServerStorage | 呼べた | 呼べなかった |
| ReplicatedStorage | 呼べた | 呼べた |
ServerScriptServiceとServerStorageの中は、プレイヤーのパソコン側からは見えません。LocalScriptから使うModuleScriptは、ReplicatedStorageに置きます。
LocalScriptから、ServerScriptServiceのCoinManagerを次のように呼んでみました。
local ServerScriptService = game:GetService("ServerScriptService")
local CoinManager = require(ServerScriptService:WaitForChild("CoinManager"))
テストを始めて5秒ほどたつと、出力にオレンジ色の文字で「Infinite yield possible on 'ServerScriptService:WaitForChild("CoinManager")'」と出ました(赤い枠)。CoinManagerがいつまでも見つからず、待ち続けているという知らせです。

この記事のCoinManagerは、コインを渡す処理と右上の一覧を作る処理をサーバーで行うので、ServerScriptServiceに置いたままにします。
7. よく出る赤い文字・オレンジ色の文字と直し方
この節も読むだけで大丈夫です。以下は、アソビシフト編集部が作品をわざと書きかえて、ModuleScriptでよく出る文字を4つ起こして確かめた結果です。どれもテスト中の出力の欄に出ます。確かめたあとは、作品をもとのコードに戻しています。
require の名前をまちがえた
SmallCoinの中のPickupScriptの4行目を WaitForChild("CoinManeger") のように、ModuleScriptの名前とちがう名前にすると、5秒ほどたってオレンジ色の「Infinite yield possible on 'ServerScriptService:WaitForChild("CoinManeger")'」が出ます(画像の1)。その下の行に、まちがえたスクリプトと行(Workspace.SmallCoin.PickupScript、Line 4)が出ます(画像の2)。

直し方:出力に出たスクリプトの行を開き、WaitForChild("") の中の名前を、エクスプローラのModuleScriptの名前(CoinManager)と1文字ずつそろえます。大文字と小文字も区別されます。
CoinManagerの最後の return を消した
CoinManagerの最後の行の return CoinManager を消すと、テストを始めたときに赤い文字で「Module code did not return exactly one value」が出ます(赤い枠)。ModuleScriptが値(この記事では表)をちょうど1つ返さなかった、という意味です。

直し方:CoinManagerのいちばん最後の行に return CoinManager を書き足します。
give を local function にした
CoinManagerの function CoinManager.give(hit, kind) を local function give(hit, kind) に書きかえると、テストを始めたときは何も出ません。コインに触れたときに、赤い文字で「Workspace.SmallCoin.PickupScript:14: attempt to call a nil value」が出ます(赤い枠)。コインの数も増えません。

local function で作った関数は表に入らないので、PickupScriptの14行目の CoinManager.give は空っぽ(nil)になります。
直し方:local function give を function CoinManager.give に戻します。
2つのModuleScriptがおたがいを require した
ServerScriptServiceに2つ目のModuleScript「ShopManager」を作り、中身を次のようにしました。
local CoinManager = require(game:GetService("ServerScriptService"):WaitForChild("CoinManager"))
local ShopManager = {}
return ShopManager
さらに、CoinManagerの2行目に次の1行を足して、CoinManagerからもShopManagerを呼ぶようにしました。
local ShopManager = require(game:GetService("ServerScriptService"):WaitForChild("ShopManager"))
テストを始めると、赤い文字で「Requested module experienced an error while loading」が何回も出ます(画像の1)。最初の文字の下には、CoinManagerの2行目(ServerScriptService.CoinManager、Line 2)が出ます(画像の2)。

AがBを呼び、BがAを呼ぶと、Robloxは読み込みを止めてエラーにします。
直し方:どちらか片方の require を消し、呼ぶ向きを一方通行にします。この例ではCoinManagerの2行目を消し、ShopManagerからCoinManagerを呼ぶだけにしました。すると赤い文字は出なくなり、コインに触れるとCoinsが増えるようになりました。
AIに相談するときの伝え方
Roblox Studioで、ServerScriptServiceにModuleScript「CoinManager」を置いています。
中に COIN_VALUES(small 1、big 5、chest 20)と、触れた人にコインを足す関数 CoinManager.give(hit, kind) があり、
Workspaceの SmallCoin・BigCoin・Chest の中の Script「PickupScript」から require で呼んでいます。
コインのほかに、触れると経験値が増えるアイテムも足したいです。CoinManager にどう書き足せばよいですか。
よくある質問
ModuleScriptだけを置いても動かないのはなぜ?
ModuleScriptは、ほかのスクリプトが require で呼んだときに、はじめて動きます(Robloxの公式の説明に書かれている決まりです)。
requireを3つのスクリプトで書くと、ModuleScriptは3回動く?
3回は動きません。Robloxの公式の説明によると、ModuleScriptは最初に require されたときに1回だけ動きます。2回目からは同じ表を返します。この1回は、サーバーとプレイヤーのパソコン(LocalScript)で別々に数えます。この記事の4節のテストでも、3つのPickupScriptが require したのに、出力の「CoinManager を読み込みました」は1回だけでした。ReplicatedStorageに置いてScriptとLocalScriptの両方から呼んだときは、サーバーとプレイヤーのパソコンで1回ずつ、合わせて2回出ました。
ScriptとModuleScriptは、どう使い分ける?
アイテムに触れたときのような、そのものだけの動きはScriptに書き、いくつものスクリプトで使う処理(ポイントを渡すなど)はModuleScriptにまとめます(Robloxの公式の説明による使い分けです)。この記事では、触れたかどうかをPickupScript、コインを渡す処理をCoinManagerに分けました。
次は、線路から外れない電車を作り、連結・駅・踏切まで動かします。次のステップ(上級 17/40)
次に知りたいことを選ぶ
- 次のステップ:線路から外れない電車を作り、連結・駅・踏切まで動かします → ロブロックス(Roblox)スタジオの電車の作り方
- 商品の一覧をModuleScriptに置くショップを作りたい → ロブロックス(Roblox)のショップの作り方
- ゲームの決まりをModuleScriptにまとめた例を見たい → ロブロックス(Roblox)の鬼ごっこの作り方
- スクリプトの読み方を基本から知りたい → AIが書いたスクリプトの読み方

















