LocalScript、Script、ModuleScriptの関係性

もっけ
もっけ

Robloxは、スクリプトでプログラミングを書きますが、
Robloxの特徴的なこととして、クライアント側とサーバ側の実装が可能です。

クライアントで動くのが、LocalScript

サーバで動くのが、Script

共通関数が、ModuleScript

になります。

LocalScript

クライアントで動作するものになります。例えば、UIなどです。
プレイヤーがボタンを押した時、アイテムの画面を表示したと仮定します。
そうした時、画面を表示したいのは、ボタンを押したプレイヤーだけですよね。

-- UI ボタンが押されたらMAP を表示する
-- script.Parent は、UI ボタンになっています
local openButton = script.Parent
local mapGui = openButton.Parent

openButton.MouseButton1Click:Connect(function()
	mapGui.Enabled = true
end)

用途)

・プレイヤーによるUI操作の制御
・プレイヤーのパラメータ付与

格納場所)

・StarterGUI
・StarterPlayer(StarterCharacterScripts、StarterPlayerScripts)
・ReplicatedFirst

https://create.roblox.com/docs/ja-jp/reference/engine/classes/LocalScript

Script

サーバで動作するものになります。例えば、ゲームシステムなどです。
ゲームに人が集まって、ゲームを開始し、ゲームを終了する。この一連の流れを制御するのは、サーバになります。影響を受けるのは、全プレイヤーが対象になりますね。

-- タイマーを動かします
local Timer = {}

function Timer:start(duration, onTick, onFinish)
	local remainingTime = duration

	while remainingTime > 0 do
		task.wait(1)
		remainingTime = remainingTime - 1
		if onTick then
			onTick(remainingTime)
		end
	end

	if onFinish then
		onFinish()
	end
end

return Timer

用途

・ゲームシステムの制御
・データストアの操作
・モジュールの制御

格納場所)

・ServerScriptService
・WorkSpace配下のPart等

https://create.roblox.com/docs/ja-jp/reference/engine/classes/Script

ModuleScript

共通関数を扱うのが、ModuleScriptになります。
Don’t Repeat Yourself(DRY)原則という概念があり、何度も同じ関数を色んな場所で記載せずに、一箇所にまとめることで保守性や移植性を保つことが出来ます。
LocalScript、Scriptのどちらからでも呼び出し可能です。

▼ModuleScriptの例

-- テーブルを宣言
local MyFunctions = {}

-- テーブルに関数を追加
function MyFunctions.foo()
	print("Foo!")
end

function MyFunctions.bar()
	print("Bar!")
end

-- ModuleScripts は、return で必ず値を返すこと
return MyFunctions

▼呼び出し側

-- require 関数は、ModuleScript の呼び出しに使います
-- ModuleScript から応答があるまで待ちます
local MyFunctions = require(script.Parent.MyFunctions)

-- require で呼び出すことにより、ModuleScript の関数を利用可能です
MyFunctions.foo()
MyFunctions.bar()
https://create.roblox.com/docs/ja-jp/reference/engine/classes/ModuleScript

コメント

タイトルとURLをコピーしました