Introducción a los scripts de módulo

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

A medida que los proyectos se vuelven complejos, es importante pensar en cómo se organizan los scripts. Buenas prácticas de organización pueden asegurar que el código no se duplique entre scripts o se vuelva difícil de gestionar.

Una mejor manera de organizar y reutilizar código es con scripts de módulo, un tipo único de script que almacena un conjunto de funciones y variables diseñadas para cumplir un propósito compartido, como gestionar el dinero de los jugadores o enemigos. El código dentro de los scripts de módulo puede ser utilizado por otros scripts. De esa manera, puedes llamar a la misma función que otorga monedas desde múltiples scripts diferentes cada vez que un jugador completa una misión o encuentra un objeto.

Al almacenar código comúnmente utilizado en scripts de módulo, se facilita el mantenimiento y la organización del código, ya que los cambios solo necesitan hacerse en un script de módulo, en lugar de actualizar múltiples scripts.

Conceptos básicos de los scripts de módulo

Los scripts de módulo son en realidad su propio objeto separado en comparación con los objetos de script. En Roblox, los scripts de módulo pueden ser denotados con un ícono morado.

Crear un script de módulo

Los ModuleScripts se colocan comúnmente en ServerScriptService cuando son utilizados por scripts del lado del servidor y en ReplicatedStorage cuando son utilizados por scripts locales del lado del cliente (como interacciones de GUI).

  1. Crea un ModuleScript en ServerScriptService.

Estructura de los scripts de módulo

Cuando se crea, cada script de módulo comienza con el siguiente código:

local Module = {}
return Module

La línea local Module = {} crea una tabla, o contenedor de código, donde se pueden almacenar las funciones y variables compartidas del módulo. Esta tabla debe ser renombrada según el propósito del módulo, como RewardManager o ParticleController. A diferencia de otras variables que son en camel case (myVariable), se recomienda que las tablas de módulo usen Pascal case y comiencen con mayúscula (MyModule).

local RewardManager = {}
return RewardManager

Para que otros scripts puedan usar las funciones o variables no locales de un módulo, cada módulo termina con return MyModule. Cada vez que otro script intenta obtener código del módulo, return permite que ese script acceda al código almacenado dentro de la tabla del módulo.

Agregar a los scripts de módulo

Para agregar una función o variable al módulo que pueda ser utilizada en otro script, escribe el nombre de la tabla del módulo, seguido de un punto y el nombre de la función o variable, como en TestModule.myVariable. Usar el operador de punto es otra forma de agregar código a una tabla, permitiendo que otros scripts accedan a ese código cada vez que se devuelve la tabla del módulo.

local TestModule = {}
-- Agrega una variable a la tabla 'TestModule'
TestModule.myVariable = 100
-- Agrega una función a la tabla 'TestModule'
function TestModule.doTask(player)
-- Código de marcador de posición
end
return TestModule

Alcance en los scripts de módulo

Para que una función o variable de módulo sea utilizada en un script externo, no escribas local.

Escribir local delante de variables y funciones significa que son solo utilizables por ese script. Si bien esta es una buena práctica para la mayoría de los scripts para reducir errores y problemas, no puedes hacer que las funciones y variables de los scripts de módulo sean locales.

Cualquier código utilizado solo por ese script de módulo aún debe incluir local. Por ejemplo, el código a continuación incluye la variable local difficultyModifier, que solo puede ser utilizada en ese script de módulo, y la función getCoinReward(), que puede ser utilizada en scripts fuera del módulo.

local RewardManager = {}
-- Utilizable solo en el script de módulo
local rewardCoins = 50
-- Utilizable solo en el script de módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizable en otros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager

Usar módulos en otros scripts

Por sí mismo, un script de módulo no puede ejecutar código; necesita ser cargado en otro script usando la palabra clave require(). La función require() acepta un argumento, la ubicación del script de módulo en el Explorador.

Para usar un módulo, en un script separado, establece una variable igual a require(moduleScript).

local MyModule = require(ServerStorage.ModuleScript)

Ahora, la variable MyModule contiene la tabla del módulo creada en ese script de módulo. Para usar funciones y variables de esa tabla, escribe el nombre de la variable, seguido de un punto y el nombre exacto de lo que deseas usar en ese script de módulo, como MyModule.myFunction(). Cuando el script se ejecute y alcance esa línea, accederá a esa función o variable específica almacenada en la tabla del módulo.

local MyModule = require(ServerStorage.ModuleScript)
MyModule.myFunction()

Ejemplo de RewardManager

ModuleScript - RewardManager
local RewardManager = {}
-- Utilizable solo en el script de módulo
local rewardCoins = 50
-- Utilizable solo en el script de módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizable en otros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")
-- Cargar script de módulo
local RewardManager = require(ServerStorage.RewardManager)
-- Llama a la función del script de módulo
local coins = RewardManager.getCoinReward("easy")
print("Debería otorgar " .. coins .. " monedas")

Solución de problemas general

Algunos de los consejos aquí abordan problemas comunes al trabajar con scripts de módulo. Ten en cuenta que los scripts de módulo pueden ser un tema complicado con más matices. Para más detalles, consulta esta guía más técnica sobre Scripts de Módulo.

Problema: Obtienes un mensaje de error que incluye: "Infinite yield possible" o "not a valid member".

  • Verifica la ortografía del script de módulo donde se carga. require() debe incluir la ruta exacta y la ortografía del script de módulo, que puede tener un nombre diferente al de la tabla del módulo.

Problema: Obtienes un mensaje de error que incluye: "attempt to index global".

  • En cualquier script que use un script de módulo, asegúrate de que se cargue usando la función require(). Si no, ese script no puede usar funciones y variables del script de módulo.

Resumen

Los scripts de módulo en Roblox son un método que los programadores utilizan para organizar y reutilizar código. Un script de módulo a menudo se almacena en ServerStorage (o ReplicatedStorage para interacciones basadas en el cliente). Desde allí, otros scripts pueden llamar a funciones y variables almacenadas en ese script de módulo.

Por ejemplo, un juego puede otorgar puntos a los jugadores por recoger objetos. Un script de módulo puede manejar el código para otorgar puntos. Luego, los scripts para diferentes tipos de objetos pueden simplemente llamar a la función del script de módulo. Esto reduce la necesidad de reutilizar código entre scripts, haciendo que el código sea más fácil de entender y mantener.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.