Tipos de scripts y ubicaciones

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


Para muchos desarrolladores, el desafío fundamental de adaptarse a la programación en Roblox es la importancia de la ubicación del archivo y la propiedad Script.RunContext. Dependiendo del tipo de script, su ubicación en el Explorador y el contexto de ejecución, los scripts pueden comportarse de manera muy diferente. Ciertas llamadas a métodos pueden fallar, objetos en tu juego pueden ser inaccesibles, o los scripts pueden no ejecutarse en absoluto.

La razón de esta complejidad es que los juegos de Roblox son multijugador por defecto. Los scripts necesitan la capacidad de ejecutarse solo en el servidor, solo en el cliente, o ser compartidos entre ambos. La evolución de la plataforma de Roblox a lo largo del tiempo ha complicado aún más la situación.

Tipos de scripts

Roblox tiene tres tipos de scripts:

  • Script - Código que se ejecuta en el servidor o en el cliente, dependiendo de su ubicación y propiedad Script.RunContext.
  • LocalScript - Código que se ejecuta únicamente en el cliente. No tiene un contexto de ejecución.
  • ModuleScript - Código que puedes reutilizar en otros scripts. No tiene un contexto de ejecución.

Cuando creas un Script, su contexto de ejecución por defecto es Legacy, lo que significa que a) es un script del lado del servidor y b) solo se ejecuta si está en un contenedor del servidor, como Workspace o ServerScriptService.

  • Si cambias el contexto de ejecución del script a Server, ahora también puede ejecutarse en ReplicatedStorage, pero no se recomienda. El contenido de esa ubicación se replica a los clientes, por lo que es una mala ubicación para scripts del lado del servidor.
  • Si cambias el contexto de ejecución del script a Client, puede ejecutarse en ReplicatedStorage. También puede ejecutarse en StarterCharacterScripts y StarterPlayerScripts. Sin embargo, los contenedores iniciales se copian a los clientes, por lo que el script original y la copia se ejecutan, lo cual no es deseable.

Para cambiar el contexto de ejecución de un script, selecciónalo en el Explorador y cambia el valor en la ventana de Propiedades.

Propiedad RunContext indicada para un Script.

Recomendaciones

  • Coloca scripts del cliente en ReplicatedStorage con un RunContext de Client junto con ModuleScripts que son solo del cliente.

    Al depurar en Studio, puedes hacer clic en las líneas en la ventana de Salida e ir a ReplicatedStorage.YourScript (la ubicación estable del script) en lugar de Players.YourName.PlayerScripts.YourScript (la ubicación efímera a la que el script fue copiado en tiempo de ejecución).

  • Coloca scripts del servidor en ServerScriptService con un RunContext de Server junto con ModuleScripts que son solo del servidor.

  • Para compartir código entre scripts del servidor y del cliente, utiliza ModuleScripts en ReplicatedStorage.

  • Si colocas scripts dentro de modelos y paquetes, especifica un RunContext para cada script para eliminar la ambigüedad sobre cómo se ejecuta. Configurar explícitamente esta propiedad hace que los modelos y paquetes tengan más probabilidades de funcionar correctamente desde una variedad de ubicaciones.

  • Coloca el número mínimo de scripts del cliente (como un script de carga) en ReplicatedFirst con un RunContext de Client. Para aprender más, consulta Orden de replicación.

  • Utiliza LocalScripts en StarterCharacterScripts, StarterPlayerScripts, StarterGui y StarterPack.

Ubicaciones de los scripts

LocationDescription
WorkspaceRepresenta el mundo 3D del juego. Esta ubicación funciona bien para scripts de servidor que se adjuntan directamente a objetos y controlan su comportamiento.
ReplicatedFirstContiene objetos que se replican al cliente antes que cualquier otra cosa. Esta ubicación es ideal para el conjunto mínimo absoluto de objetos y scripts del cliente necesarios para mostrar una pantalla de carga.
ReplicatedStorageContiene objetos que se replican tanto al cliente como al servidor. Esta ubicación es ideal para ModuleScripts que deseas usar tanto en el servidor como en el cliente. LocalScripts no se ejecutan desde esta ubicación, pero Scripts con un RunContext de Client sí lo hacen.
ServerScriptServiceContiene scripts de servidor. Esta ubicación es ideal para scripts que necesitan acceder a funcionalidades u objetos del lado del servidor, como la lógica del juego y el almacenamiento en la nube.
ServerStorageContiene objetos del lado del servidor. Esta ubicación es ideal para objetos grandes que no necesitan ser replicados inmediatamente a los clientes cuando se unen a un juego. Los scripts no se ejecutan desde esta ubicación, pero puedes almacenar ModuleScripts del lado del servidor aquí.
StarterPlayerStarterCharacterScriptsContiene LocalScripts que se ejecutan cuando el personaje aparece.
StarterPlayerStarterPlayerScriptsContiene LocalScripts de propósito general que se ejecutan cuando el jugador se une al juego.
StarterGuiContiene elementos de la GUI que el cliente muestra cuando carga el juego. LocalScripts pueden ejecutarse desde esta ubicación. Esta ubicación es ideal para scripts que modifican la interfaz de usuario del juego, como agregar botones, menús y ventanas emergentes.
StarterPackGeneralmente solo contiene Tools, pero también puede incluir LocalScripts para configurar las mochilas de los jugadores.

Esta imagen muestra qué ubicaciones de la ventana Explorador pueden contener scripts del cliente. Recuerda, ReplicatedFirst y ReplicatedStorage pueden contener Scripts con un RunContext de Client, mientras que los contenedores Starter[] deberían usar LocalScripts.

Diagrama que muestra qué ubicaciones de scripts se ejecutan en clientes.

Estructura de ejemplo del proyecto

El proyecto de referencia Plant muestra cómo podrías organizar tu código en un juego grande y complejo.

De particular interés es cómo almacena la vasta mayoría de su código como ModuleScripts reutilizables en ReplicatedStorage y ServerStorage.

©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.