
もっけ
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



コメント