プロジェクトが複雑になるにつれて、スクリプトの組織方法を考えることが重要になります。良好な組織方法は、スクリプト間でコードが重複しないようにすることができます。また、管理が難しくなることもあります。
コードを整理および再利用する方法は、 モジュールスクリプト 、共有目的に対応するように設計されたユニークなスクリプトタイプです。モジュールスクリプト内のコードは、他のスクリプトによって使用できます。その方法により、コインを複数の異なるスクリプトから見つけるたびに、モジュー
モジュールスクリプトに使用されているコードを常に保存することで、変更が複数のスクリプトを更新する代わりに、コードの維持と整理が容易になります。
モジュールスクリプトの基本
モジュールスクリプトは、実際にスクリプトオブジェクトと比較して自分のオブジェクトです。RRoblox(ロブロックス)blox では、モジュールスクリプトには パープル アイコンで表示できます。
モジュールスクリプトの作成
モジュールスクリプトは、ServerScriptService によって使用されると、お客側のスクリプトと一緒に、ReplicatedStorage によって使用されるようになります。これには、GUI インタラクションなどのクライアント側のローカルスクリプトが含まれます。
- Create a ModuleScript in ServerStorage .
モジュールスクリプトの構造
作成されると、すべてのモジュールスクリプトは次のコードで始まります:
local Module = {}return Module
コードのモジュール共有関数と変数を保存できる 行 local Module = {} は、モジュールの共有関数と変数を保存できるテーブルまたはコンテナを作成します。このテーブルは、モジュールの目的に変更される必
local RewardManager = {}return RewardManager
そのため、他のスクリプトはモジュールの非ローカル機能や変数を使用できますが、すべてのモジュールは、MyModule で終了します。他のスクリプトがモジュールからコードを取得しようとすると、MyModule でコードをストレージしたモジュールのテーブルにコードをアクセスできるようになります。
モジュールスクリプトに追加する
モジュールの名前を追加して、モジュールの名前の後にドットを入力し、関数または変数の名前を入力します。モジュールの名前は、TestModule.myVariable のように、モジュールの名前の後にドットを入力して、他のスクリプトからそのモジュール名にアクセスできるようにします。ダッシュオペレーターを使用すること
local TestModule = {}
-- 「TestModule」テーブルに変数を追加する
TestModule.myVariable = 100
-- 「TestModule」テーブルに関数を追加する
function TestModule.doTask(player)
-- プレースホルダーコード
end
return TestModule
モジュールスクリプトのスコープ
外部スクリプトでモジュール機能や変数を使用する場合、 don' タイプ local を使用しないでください。
変数と関数の前に local を入力すると、スクリプトは solo で使用できます。これは、エラーとトラブルシューティングのための良い習慣ですが、モジュールスクリプトの関数と変数をローカルにすることはできません。
任意のコードは、 のみ によってそのモジュールスクリプトに含まれる必要があります。たとえば、次のコードは、ローカル変数 local を含みますが、モジュールスクリプトのみに使用でき、関数 difficultyModifier は、モジュール外のスクリプトで使用でき
local RewardManager = {}
-- モジュールスクリプトでのみ使用可能
local rewardCoins = 50
-- モジュールスクリプトでのみ使用可能
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- 他のスクリプトで使用可能
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
他のスクリプトでモジュールを使用する
モジュールスクリプトは、自体でコードを実行できません — キーワードを使用して他のスクリプトに読み込む必要があります。関数 require() は、 require() の引数を 1つ受け入れ、 Global.LuaGlobals.requir必須() のモジュールスクリプトの場所を Explorer の場所で受け入れま
モジュールを使用するには、別のスクリプトで、 require(moduleScript) と同じ変数を設定します。
local MyModule = require(ServerStorage.ModuleScript)
さあ、変数 MyModule には、そのモジュールスクリプトで作成されたモジュールテーブルが含まれています。モジュールテーブルから機能と変数を使用するには、ドットを使用して変数名を入力し、そのモジュールスクリプトの正確な名前を入力します。たとえば、 MyModule
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
RewardManager の例
ModuleScript - RewardManager
local RewardManager = {}
-- モジュールスクリプトでのみ使用可能
local rewardCoins = 50
-- モジュールスクリプトでのみ使用可能
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- 他のスクリプトで使用可能
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
スクリプト - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- モジュールスクリプトをロードするlocal RewardManager = require(ServerStorage.RewardManager)--モジュールスクリプトから関数を呼び出すlocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
一般的なトラブルシューティング
モジュールスクリプトを使用する際には、コモンイシュー に対応するヒントがいくつかあります。モジュールスクリプトは、より複雑なトピックになる可能性があります。詳細は、モジュールスクリプトのガイド を参照してください。 問題: 以下のエラーメッセージを入手する: "Infinite yield possible" または "not a valid member"。
モジュールスクリプトの読み込み場所のスペルを確認します。require() は、モジュールスクリプトの正確なパスとスペルを含める必要があります。これは、モジュールテーブルと名前が異なる場合があります。 問題: グローバルインデックスを含むエラーメッセージを取得します。
モジュールスクリプトを使用するスクリプトでは、require() 関数を使用して読み込まれていることを確認してください。そうでない場合は、モジュールスクリプトの関数と変数は使用できません。
概要
Roblox のモジュールスクリプト は、コードを整理し、再利用する方法をコードです。モジュールスクリプトは通常、ServerStorage (または ReplicatedStorage クライアントベースのインタラクションの場合) に保存されます。そこから、他のスクリプトは、モジュールスクリプトに保存されたコードを呼び出すことができます。
たとえば、1つのゲームでプレイヤーにオブジェクトを集めるためのポイントを付与する場合があります。モジュールスクリプトは、コードを処理してポイントを付与できます。その後、異なる種類のオブジェクトのスクリプトは、モジュールスクリプト機能を呼び出すことができます。これにより、スクリプト間でコードを再使用する必要がなくなり、コードをより����