À medida que os projetos se tornam complexos, torna-se importante pensar como os scripts são organizados. Boas práticas de organização podem garantir que o código não seja duplicado entre os scripts ou se torne difícil de gerenciar.
Um modo melhor de organizar e reutilizar código é com scripts de módulo , um tipo único de script que armazena um conjunto de funções e variáveis projetadas para cumprir um propósito compartilhado, como gerenciar o dinheiro do jogador ou inimigos. Código dentro de scripts de módulo pode ser usado por outros scripts. Desta forma, você pode chamar a mesma função que dá moedas de múltiplos scripts sempre que um jogador termina uma missão ou encon
Ao armazenar código comumente usado em scripts de módulo, torna mais fácil manter e organizar código, pois as alterações só precisam ser feitas em um script de módulo, não em vários scripts.
Básicas de Script de Módulo
Scripts de módulo são, na verdade, seus próprios objetos separados em comparação com objetos de script. No Roblox, scripts de módulo podem ser designados com um ícone púrpura .
Criando um Script de Módulo
ModuleScripts são comumente colocados em ServerScriptService quando usados por scripts do lado do servidor e ReplicatedStorage quando usados por scripts locais do lado do cliente (como interações de GUI).
- Criar um ModuleScript em ServerStorage .
Estrutura de Scripts de Módulo
Ao ser criado, todo o script de módulo começa com o código abaixo:
local Module = {}return Module
A linha local Module = {} cria uma tabela, ou contêiner de código, onde as funções e variáveis compartilhadas do módulo podem ser armazenadas. Esta tabela deve ser renomeada para o propósito do módulo, como RewardManager ou ParticleController
local RewardManager = {}return RewardManager
Então, outros scripts podem usar as funções ou variáveis não locais de um módulo, sempre que um script tentar obter código do módulo, retornar MyModule . Sempre que outro script tentar obter código a partir da tabela de módulos, retornar permite que esse script acessar o código armazenado dentro da tabela de módulos.
Adicionando a Scripts de Módulo
Para adicionar uma função ou variável ao módulo que pode ser usado em outro script, digite o nome da tabela do módulo, seguido de um ponto, e o nome da função ou variável, como em TestModule.myVariable. Usando o operador de ponto é outra maneira de adicionar código em uma tabela, permitindo que outros scripts acesssem esse código sempre que a tabela de módulo for retornada.
local TestModule = {}
-- Adiciona uma variável à tabela 'TestModule'
TestModule.myVariable = 100
-- Adiciona uma função à tabela 'TestModule'
function TestModule.doTask(player)
-- códigode espaço reservado
end
return TestModule
Mira em Scripts de Módulo
Para uma função ou variável de módulo a ser usada em um script externo, não digite local .
Digitar local na frente de variáveis e funções significa que eles são apenas usáveis por esse script. Embora esta seja uma boa prática para a maioria dos scripts para reduzir erros e problemas de solução de problemas, você não pode fazer funções e variáveis de script locais.
Qualquer código usado somente por esse módulo de script ainda deve incluir local . Por instância, o código abaixo inclui a variável local difficultyModifier, que só pode ser usada em este módulo de script, e a função 1> GCoinReward()1>, que pode ser usada em scripts fora do módulo.
local RewardManager = {}
-- Útil apenas no script de módulo
local rewardCoins = 50
-- Útil apenas no script de módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Útil em outros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Usando Módulos em Outros Scripts
Por si mesmo, um script de módulo não pode executar código — ele precisa ser carregado em outro script usando a palavra-chave require(). A função require() aceita um argumento, o local do módulo de script no Explorador.
Para usar um módulo, em um script separado, defina uma variável igual a require(moduleScript).
local MyModule = require(ServerStorage.ModuleScript)
Agora, a variável MyModule contém a tabela de módulos criada nesse script de módulo. Para usar funções e variáveis da tabela, digite o nome da variável, seguido de um ponto, e o nome exato de usar naquele script de módulo, como MyModule.myFunction(). Quando o script é executado e atinge essa linha, ele acessará aquele função ou variável específico ar
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Exemplo do RewardManager
ModuleScript - RewardManager
local RewardManager = {}
-- Útil apenas no script de módulo
local rewardCoins = 50
-- Útil apenas no script de módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Útil em outros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Carregar script de módulolocal RewardManager = require(ServerStorage.RewardManager)--Chama a função do script do módulolocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Problemas Gerais de Solução
Algumas das dicas aqui tratam de problemas comuns ao trabalhar com scripts de módulo. Tenha em mente que scripts de módulo podem ser um tópico complicado com mais nuance. Para mais detalhes, veja este mais guia técnico em Scripts de Módulo . Problema: Obtenha uma mensagem de erro incluindo: "Infinite yield possible" ou "not a valid member".
Verifique a ortografia do script de módulo onde ele é carregado. require() deve incluir o caminho e ortografia exata do script de módulo, que pode ser chamado de forma diferente da tabela de módulo. Problema: Obter uma mensagem de erro incluindo: "attempt to index global" .
Em qualquer script usando um script de módulo, certifique-se de que ele está carregado usando a função require(). Se não, esse script não pode usar funções e variáveis do script de módulo.
Visão Geral
Scripts de módulo no Roblox são um método usado por scripts para organizar e reutilizar código. Um script de módulo geralmente é armazenado em ServerStorage (ou ReplicatedStorage para interações baseadas em clientes). De lá, outros scripts podem chamar funções e variáveis armazenadas nesse script de módulo.
Por instância, um jogo pode atribuir pontos aos jogadores por coletar objetos. Um script de módulo pode lidar com código para dar pontos. Então, scripts para diferentes tipos de objetos podem apenas chamar a função de script de módulo. Isso reduz a necessidade de reutilizar código entre scripts, tornando o código mais fácil de entender e manter.