프로젝트가 복잡해질수록 스크립트 조직 방법을 생각하는 것이 중요합니다. 좋은 조직 관행은 스크립트 간에 코드가 중복되지 않도록 하거나 관리하기 어려워지는 문제를 해결할 수 있습니다.
코드를 구성하고 재사용하는 더 나은 방법은 모듈 스크립트 입니다, 공유 목적을 위해 설계된 함수 및 변수 집합을 저장하는 고유한 유형의 스크립트입니다. 모듈 스크립트 내의 코드는 다른 스크립트에 의해 사용될 수 있습니다. 그런 식으로
모듈 스크립트에 일반적으로 사용되는 코드를 저장하면 변경 사항을 하나의 모듈 스크립트에만 적용하므로 코드를 유지 관리하고 구성하는 것이 더 쉽습니다.
모듈 스크립트 기초
모듈 스크립트는 스크립트 개체와 별도의 개체입니다. Roblox에서 모듈 스크립트는 보라색 아이콘으로 표시될 수 있습니다.
모듈 스크립트 생성
ModuleScripts는 서버 사이드 스크립트에 의해 사용되는 경우 ServerScriptService 에 배치되며, 클라이언트 사이드 로컬 스크립트에 의해 사용되는 경우 ReplicatedStorage 에 배치됩니다(예: GUI 인터랙션).
- 서버 스토리지의 ModuleScript를 만듭니다.
모듈 스크립트 구조
생성될 때, 모든 모듈 스크립트는 다음과 같은 코드로 시작합니다:
local Module = {}return Module
줄 local Module = {} 는 모듈의 코드함수 및 변수를 저장할 수 있는 테이블이나 컨테이너를 생성합니다. 이 테이블은 모듈의 목적에 따라 이름을 변경해야 합니다. 예를
local RewardManager = {}return RewardManager
그래서 다른 스크립트는 모듈의 로컬 함수 또는 변수를 사용할 수 있지만, 모든 모듈이 return MyModule 으로 끝납니다. 다른 스크립트가 모듈에서 코드를 가져오려고 시도할 때마다, return은 모듈 테이블에 저장된 코드에 액세스할 수 있게 해줍니다.
모듈 스크립트에 추가
다른 스크립트에서 사용할 수 있는 모듈에 함수 또는 변수를 추가하려면 모듈 테이블의 이름, 따옴표 및 함수 또는 변수의 이름을 입력하십시오, TestModule.myVariable 의 경우와 같이. 따옴표 연산자를 사용하면 모듈 테이블이 반환될 때마다 다른 스크립
local TestModule = {}
-- 테스트 모듈 테이블에 변수 추가
TestModule.myVariable = 100
-- 테스트 모듈 테이블에 함수 추가
function TestModule.doTask(player)
-- 자리 표시자 코드
end
return TestModule
모듈 스크립트에 범위 지정
외부 스크립트에서 사용할 모듈 함수 또는 변수를 사용하려면 하지 마십시오. local 를 입력하지 마십시오.
변수 및 함수 앞에 있는 local은 해당 스크립트에서만 사용할 수 있습니다. 이는 오류 및 문제 해결을 위한 것입니다. 이 좋은 관행은 대부분의 스크립트에 대해 좋은 관행이지만 모듈 스크립트 함수 및 변수를 로컬로 만들 수는 없습니다.
이 모듈 스크립트에 사용된 코드는 모두 오직 이 모듈 스크립트에 포함되어 있어야 합니다. 예를 인스턴스, 아래의 코드는 local 를 포함하여 로컬 변수를 사용하는 코드를 포함하지만, 이 모듈 스크립트 외부의 스크립트
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()
RewardManager 예시
모듈 스크립트 - 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() 는 모듈 스크립트의 정확한 경로와 스펠링을 포함해야 합니다. 이 모듈 표에 다르게 이름이 지정된 경우에도 모듈 스크립트의 정확한 경로와 스펠링을 포함해야 합니다. 문제: 다음을 포함한 오류 메시지 받기: "attempt to index global".
모듈 스크립트를 사용하는 모든 스크립트에서 함수 require() 를 사용하여 로드하십시오. 그렇지 않으면 모듈 스크립트의 함수와 변수를 사용할 수 없습니다.
요약
Roblox의 모듈 스크립트 는 코드를 구성하고 재사용하는 방법을 정의하는 메서드입니다. 모듈 스크립트는 일반적으로 ServerStorage(또는 ReplicatedStorage)에 저장됩니다. 그리고 다른 스크립트는 클라이언트 기반 상호 작용에 대해 저장된 코드를 호출할 수 있습니다.
예를 인스턴스, 한 게임은 플레이어에게 개체를 수집하도록 포인트를 할당할 수 있습니다. 모듈 스크립트는 코드를 처리하여 포인트를 할당할 수 있습니다. 그런 다음 다양한 유형의 개체에 대한 스크립트를 호출하여 모듈 스크립트 함수를 처리할 수 있습니다. 이렇게 하면 스크립트 간에 코드를 재사용하는