프로젝트가 복잡해지면 스크립트가 어떻게 구성되는지 생각하는 것이 중요해집니다.좋은 조직 관행은 코드가 스크립트 간에 복제되지 않거나 관리하기 어려워지지 않도록 할 수 있습니다.
코드를 구성하고 재사용하는 더 나은 방법은 모듈 스크립트 로, 공유 목적을 충족하도록 설계된 함수 및 변수 세트를 저장하는 독특한 유형의 스크립트입니다, 플레이어 돈이나 적을 관리하는 것과 같은.모듈 스크립트 내의 코드는 다른 스크립트에서 사용할 수 있습니다.그런 식으로 플레이어가 퀘스트를 완료하거나 픽업을 찾을 때마다 여러 개의 다른 스크립트에서 동일한 함수를 호출할 수 있습니다.
모듈 스크립트에 일반적으로 사용되는 코드를 저장하여 여러 스크립트를 업데이트하는 대신 한 모듈 스크립트만 변경하면 되므로 코드 유지 및 조직이 더 쉬워집니다.
모듈 스크립트 기본 사항
모듈 스크립트는 실제로 스크립트 개체와 별도의 개체입니다.Roblox에서 모듈 스크립트는 보라색 아이콘 으로 표시될 수 있습니다.
모듈 스크립트 만들기
모듈 스크립트는 서버 사이드 스크립트를 사용할 때 ServerScriptService 에 일반적으로 배치되고 클라이언트 사이드 로컬 스크립트(예: GUI 상호 작용)를 사용할 때 ReplicatedStorage 에 배치됩니다.
- 서버스크립트 서비스( ServerScriptService )에서 모듈 스크립트 를 생성합니다.

모듈 스크립트 구조
생성되면 모든 모듈 스크립트는 아래 코드로 시작합니다:
local Module = {}return Module
라인 local Module = {} 는 모듈의 공유 함수와 변수가 저장될 수 있는 테이블 또는 코드 컨테이너를 생성합니다.이 테이블은 모듈의 목적에 맞게 이름을 바꿔야 합니다(예: RewardManager 또는 ParticleController).대/소문자 구분(myVariable)인 다른 변수와는 달리, 모듈 테이블은 파스칼 케이스를 사용하고 대문자로 시작하는 것이 좋습니다(MyModule).
local RewardManager = {}return RewardManager
따라서 다른 스크립트는 모듈의 비로컬 함수나 변수를 사용할 수 있으며, 모든 모듈은 return MyModule로 끝납니다.다른 스크립트가 모듈에서 코드를 가져오려고 할 때마다 모듈 테이블 내에 저장된 스크립트 액세스 코드를 반환합니다.
모듈 스크립트에 추가
다른 스크립트에서 사용할 수 있는 모듈에 함수나 변수를 추가하려면 모듈 테이블 이름, 점 및 함수나 변수의 이름을 입력하십시오, 예를 들어 TestModule.myVariable 에서와 같이.점 연산자를 사용하는 것은 모듈 테이블이 반환될 때마다 다른 스크립트에서 해당 코드에 액세스할 수 있도록 하는 또 다른 방법입니다.
local TestModule = {}
-- 테스트 모듈 테이블에 변수 추가
TestModule.myVariable = 100
-- 테스트 모듈 테이블에 함수 추가
function TestModule.doTask(player)
-- 자리 표시 코드
end
return TestModule
모듈 스크립트에서 범위 지정
외부 스크립트에서 사용할 모듈 함수나 변수의 경우, 사용하지 마십시오 local 를 입력하지 마십시오.
변수와 함수 앞에 local를 입력하면 해당 스크립트에서만 사용할 수 있습니다. 만 .오류 및 문제 해결을 위한 대부분의 스크립트에 대한 좋은 방법이지만 모듈 스크립트 기능과 변수를 로컬로 만들 수는 없습니다.
해당 모듈 스크립트에서만 사용되는 모든 코드는 여전히 를 포함해야 합니다.예를 인스턴스아래 코드에는 해당 모듈 스크립트에서만 사용할 수 있는 로컬 변수 difficultyModifier 와 모듈 외부 스크립트에서 사용할 수 있는 함수 getCoinReward() 가 포함되어 있습니다.
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()는 하나의 인수를 받으며, 탐색기에서 모듈 스크립트의 위치입니다.
모듈을 사용하려면 별도의 스크립트에서 변수를 require(moduleScript)와 같이 설정하십시오.
local MyModule = require(ServerStorage.ModuleScript)
이제 변수 MyModule에는 해당 모듈 스크립트에서 생성된 모듈 테이블이 포함됩니다.해당 테이블의 함수와 변수를 사용하려면 변수 이름을 입력하고 점 다음에 해당 모듈 스크립트에서 사용할 정확한 이름, 예를 들어 MyModule.myFunction() 을 입력하십시오.스크립트가 실행되고 해당 라인에 도달하면 모듈 테이블에 저장된 특정 함수나 변수에 액세스합니다.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
보상 관리자 예시
모듈스크립트 - 보상 관리자
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()는 모듈 스크립트의 정확한 경로와 철자를 포함해야 하며, 모듈 테이블과 이름이 다를 수 있습니다. 문제: 포함하는 오류 메시지를 가져옵니다: "attempt to index global".
모듈 스크립트를 사용하는 모든 스크립트에서 함수 require() 를 사용하여 로드되었는지 확인하십시오.그렇지 않으면 해당 스크립트는 모듈 스크립트의 함수와 변수를 사용할 수 없습니다.
요약
Roblox의 모듈 스크립트 는 코드를 구성하고 재사용하기 위해 코더가 사용하는 방법입니다.모듈 스크립트는 종종 ServerStorage(또는 클라이언트 기반 상호 작용의 ReplicatedStorage)에 저장됩니다.거기에서 다른 스크립트는 해당 모듈 스크립트에 저장된 함수와 변수를 호출할 수 있습니다.
예를 인스턴스, 한 게임은 개체를 수집하는 플레이어에게 포인트를 수여할 수 있습니다.모듈 스크립트는 점수를 제공하기 위한 코드를 처리할 수 있습니다.그런 다음 다양한 유형의 개체에 대한 스크립트는 모듈 스크립트 함수만 호출할 수 있습니다.이렇게 하면 스크립트 간에 코드를 재사용할 필요가 줄어들어 코드를 더 쉽게 이해하고 유지할 수 있습니다.