ロブロックス(Roblox)のモジュールスクリプト(ModuleScript)の使い方|requireで同じコードを使い回す方法を画像で解説

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

「ロブロックスで、同じことをするスクリプトをいくつも書いていて、直すたびに全部を書きかえるのが大変」「ModuleScriptとrequireの使い方が分からない」

ロブロックス(Roblox)スタジオのモジュールスクリプト(ModuleScript)の使い方を、実際の画像付きで誰でも簡単に分かるように解説します。ここでは、コインを渡す仕組みを1つのModuleScriptにまとめ、小さいコイン・大きいコイン・宝箱の3つのスクリプトから呼び出します。コインの数を1か所で変えると、3つ全部の動きが変わります。

上級ステップ16/40 前の記事:ロブロックス(Roblox)スタジオのテキストボックスの使い方 全体の順番を見る

使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。スクリプトの入れ方はスクリプトの読み方、右上の一覧(leaderstats)はコイン集めゲームの作り方で解説しています。

先に答え

知りたいこと答え
モジュールスクリプトとはほかのスクリプトから呼び出して使う、関数や数をまとめておくスクリプト。それだけでは動かない
どうやって呼び出す?使う側のスクリプトで require(ModuleScriptの場所) と書く。返ってきた表の中の関数を 名前.関数名() で使う
どこに置く?サーバーのスクリプトだけが使うならServerScriptService、LocalScriptからも使うならReplicatedStorage(公式の説明)
何がうれしい?同じ処理を1か所に書けるので、直すときはModuleScriptだけを書きかえればよい

今回の完成状態:下の画像のように、小さいコイン・大きいコイン・宝箱に触れると、右上の「Coins」がそれぞれの数だけ増えれば成功です。

作るものと流れ

名前種類置く場所役目
SmallCoinPartWorkspace小さいコイン。触れると1枚
BigCoinPartWorkspace大きいコイン。触れると5枚
ChestPartWorkspace宝箱。触れると20枚
CoinManagerModuleScriptServerScriptServiceコインの数の表と、コインを渡す関数をまとめる。右上の一覧(Coins)も作る
PickupScriptScriptSmallCoin・BigCoin・Chestの中に1つずつ触れられたらCoinManagerを呼ぶ

3つのPickupScriptは、中身がほとんど同じです。違うのは、どの種類のコインかを決める1行だけです。コインを渡す細かい処理は全部CoinManagerに書くので、3つのスクリプトは短くて済みます。

1. コインと宝箱を置く

小さいコイン(SmallCoin)

新しいBaseplateを開きます。エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

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

続けてSmallCoinを選んだまま、次の8つのプロパティを1つずつ変えます。

プロパティ値理由
ShapeCylinder(一覧から選ぶ)円柱にする
Size0.4, 2.5, 2.5薄くて丸いコインの形にする(1つ目の数が厚さ)
Orientation(▼CFrameのすぐ下)0, 90, 0丸い面を画面の手前へ向ける
Position(▼CFrameのすぐ下)-6, 3, -12スタートの台の奥の左に浮かべる
Color255, 200, 0金色にする
MaterialNeon(一覧から選ぶ)光って見えるようにする
Anchoredチェックを入れるテストで落ちないように固定する
CanCollideチェックを外すぶつからずに通り抜けて触れるようにする
  1. プロパティの検索欄に「Shape」と入れ、右の「Block」を押して開く一覧から「Cylinder」を押します(下の1枚目)
  2. 検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「0.4, 2.5, 2.5」と入れてEnterキーを押します(下の2枚目)
  3. 検索欄に「Orientation」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のOrientationに「0, 90, 0」と入れてEnterキーを押します。横を向いていたコインの丸い面が、画面の手前を向きます(下の3枚目)
  4. 検索欄に「Position」と入れ、3つ並ぶうちのいちばん上、「▼CFrame」のすぐ下のPositionに「-6, 3, -12」と入れてEnterキーを押します(下の4枚目の1)。コインがスタートの台の奥の左に浮かびます(下の4枚目の2)
  5. 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「255, 200, 0」と入れ、Enterキーを押します(下の5枚目)
  6. 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Neon」を押します(下の6枚目)
  7. 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の7枚目)
  8. 検索欄に「CanCollide」と入れ、2つ並ぶうちの上、名前がちょうど「CanCollide」の欄の右の四角を押してチェックを外します(下の8枚目)

大きいコイン(BigCoin)

大きいコインは、SmallCoinを複製して作ります。Shape・Orientation・Color・Material・Anchored・CanCollideは、複製するとSmallCoinと同じ値になるので変えません。変えるのは次の3つです。

変える所値
名前BigCoin
Size0.6, 4, 4
Position(▼CFrameのすぐ下)0, 3.5, -12
  1. エクスプローラで「SmallCoin」を押して選び、Ctrl + Dキーを押します。同じ場所に複製ができ、複製したほうが選ばれた状態になります
  2. エクスプローラでそのままF2キーを押し、名前を「BigCoin」に変えます(下の1枚目)
  3. BigCoinを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「0.6, 4, 4」と入れてEnterキーを押します(下の2枚目)
  4. 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「0, 3.5, -12」と入れてEnterキーを押します(下の3枚目の1)。SmallCoinの右に、ひとまわり大きいコインが浮かびます(下の3枚目の2)

宝箱(Chest)

宝箱は、新しいPartで作ります。

プロパティ値理由
Size3, 2, 2横長の箱にする
Position(▼CFrameのすぐ下)6, 1, -12大きいコインの右の地面に置く
Color140, 80, 30茶色にする
MaterialWood(一覧から選ぶ)木の箱に見せる
Anchoredチェックを入れる固定する
CanCollideチェックを外す通り抜けて触れるようにする
  1. エクスプローラの「Workspace」にマウスを乗せて「+」を押し、一覧の検索欄に「Part」と入れて「Part」を押します
  2. エクスプローラでPartを選んだままF2キーを押し、名前を「Chest」に変えます(下の1枚目)
  3. Chestを選んだまま、プロパティの検索欄に「Size」と入れ、名前がちょうど「Size」の欄に「3, 2, 2」と入れてEnterキーを押します(下の2枚目)
  4. 検索欄に「Position」と入れ、「▼CFrame」のすぐ下のPositionに「6, 1, -12」と入れてEnterキーを押します(下の3枚目の1)。大きいコインの右の地面に箱が置かれます(下の3枚目の2)
  5. 検索欄に「Color」と入れ、名前がちょうど「Color」の欄の右の数字を押して「140, 80, 30」と入れ、Enterキーを押します(下の4枚目)
  6. 検索欄に「Material」と入れ、右の「Plastic」を押して開く一覧から「Wood」を押します(下の5枚目)
  7. 検索欄に「Anchored」と入れ、右の四角を押してチェックを入れます(下の6枚目)
  8. 検索欄に「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() doCoinManagerが読み込まれる前から入っていた人にも、右上の一覧を作る。ModuleScriptは require されたときに初めて動くので、その時点でもう入っている人の分をここで作る
function CoinManager.give(hit, kind)表の中に入れた関数。local を付けず、CoinManager. を前に付けたので、ほかのスクリプトから呼べる
hit と kindgive を呼ぶときに渡される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)

  1. エクスプローラの「BigCoin」にマウスを乗せて、右に出る「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します
  2. エクスプローラでBigCoinの中に入ったScriptを押して選び、F2キーを押して名前を「PickupScript」に変えます
  3. 開いている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)

  1. エクスプローラの「Chest」にマウスを乗せて、右に出る「+」を押し、一覧の検索欄に「Script」と入れて「Script」を押します
  2. エクスプローラでChestの中に入ったScriptを押して選び、F2キーを押して名前を「PickupScript」に変えます
  3. 開いている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)スタジオの電車の作り方

次に知りたいことを選ぶ

次に読む記事