Pour les studios de développement professionnels, mettre en place des outils tiers et investir dans l'automatisation peut améliorer considérablement la productivité des développeurs. L'approche axée sur le cloud de Roblox a de nombreux avantages, mais déplacer certaines portions du flux de travail de développement en dehors du cloud peut aider les équipes plus importantes à suivre les changements dans le temps, à réviser le code et à utiliser les langages et outils avec lesquels elles sont déjà familiarisées.
- Si vous souhaitez simplement utiliser un éditeur de texte externe ou garder votre code sous contrôle de version, Script Sync est un excellent choix.
- Si vous souhaitez gérer l'ensemble de votre projet sous forme de fichiers locaux, cette page couvre quelques outils et stratégies.
Le problème de synchronisation
À sa base, utiliser des outils externes avec Roblox est un problème de synchronisation :
- Vous voulez que vos instances Roblox existent en tant que fichiers sur le disque afin que vous puissiez utiliser vos propres outils pour travailler dessus.
- Vous devez récupérer vos fichiers dans votre projet Roblox après avoir terminé de travailler dessus.
- Si quelqu'un d'autre a modifié ces mêmes fichiers entre-temps, vous devez gérer les conflits.
Pour que l'ensemble de la solution semble transparente et automatique, vous devez a) écouter les changements sur les fichiers et b) réincorporer ces changements dans Studio.
Plutôt que l'approche axée sur le cloud de Roblox, Rojo permet une approche "axée sur le système de fichiers". Il exécute un serveur sur votre machine qui communique avec un plugin Studio pour synchroniser vos fichiers et le modèle de données de Studio.
Installer Rojo avec Rokit
Vous pouvez télécharger et exécuter manuellement un binaire Rojo, mais cette approche comporte le risque que différents développeurs de votre équipe utilisent différentes versions de Rojo. Une meilleure solution est d'utiliser un gestionnaire de chaînes d'outils comme Rokit, qui utilise un fichier de configuration – une liste de référentiels et de versions – pour rendre le processus d'installation et de mise à niveau cohérent sur les machines.
Comme il gère votre environnement de développement de base plutôt que les packages au sein de votre projet, Rokit ressemble plus à nvm qu'à npm, mais la comparaison n'est pas parfaite. Un simple fichier rokit.toml ressemble à ceci :
[tools]
rojo = "rojo-rbx/rojo@7.6.1"
wally = "upliftgames/wally@0.3.2"
lune = "lune-org/lune@0.10.4"
Ensuite, vous installez ces outils avec rokit install. En plus d'un fichier rokit.toml global, Rokit prend en charge des fichiers par projet, de sorte que vous pouvez facilement utiliser différentes versions de Rojo, Wally ou tout autre outil pour différents projets et maintenir toute votre équipe sur ces mêmes versions.
Lorsqu'un outil publie une nouvelle version, vous devez alors augmenter explicitement le numéro de version dans votre fichier .toml, utiliser Rokit pour effectuer la mise à niveau, tester la nouvelle version et revenir en arrière si cela cause des problèmes. Pour les commandes et instructions d'installation, consultez Rokit.
Exécuter Rojo
Après avoir installé Rojo avec Rokit, ce que vous avez vraiment installé est le serveur Rojo. L'étape suivante consiste à installer le plugin Rojo pour Roblox Studio.
Vous pouvez l'installer depuis le Creator Store ou l'installer localement avec cette commande :
rojo plugin install
Ensuite, générez la structure de projet pour votre nouveau jeu et construisez-la :
rojo init my-new-experiencecd my-new-experiencerojo build -o my-new-experience.rbxl
Alternativement, vous pouvez porter un jeu existant. De toute façon, après avoir un projet, démarrez le serveur Rojo :
rojo serve
Dans Roblox Studio, ouvrez le fichier .rbxl que vous venez de construire, ouvrez le plugin Rojo et connectez-vous à votre serveur en cours d'exécution, moment auquel vous pouvez commencer à apporter des modifications dans votre éditeur de texte préféré et voir ces modifications se synchroniser automatiquement avec Studio.


Les projets Rojo ont certaines exigences de nommage pour les fichiers, de nombreuses options de configuration et certaines limitations, toutes abordées dans la documentation de Rojo.
Gestionnaires de packages
Roblox dispose d'un ensemble robuste d'API incluses, mais si vous souhaitez utiliser des packages logiciels communautaires de manière cohérente et reproductible, vous avez besoin d'un gestionnaire de packages. Wally est une option populaire. Vous pouvez l'installer via Rokit, tout comme Rojo.
Dans le répertoire Rojo de votre jeu, exécutez wally init. Ensuite, ajoutez vos packages souhaités à wally.toml. Le fichier pourrait ressembler à ceci :
[package]
name = "my-home-directory/my-new-experience"
version = "0.1.0"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
[dependencies]
react = "jsdotlua/react@17.2.1"
react-roblox = "jsdotlua/react-roblox@17.2.1"
cryo = "phalanxia/cryo@1.0.3"
Ensuite, exécutez wally install. Wally crée un répertoire Packages et y télécharge les packages spécifiés. L'étape finale consiste à ajouter le répertoire Packages à Rojo afin que son contenu soit synchronisé avec Roblox. Ouvrez default.project.json et ajoutez le chemin. Pour simplifier, cet exemple ajoute l'ensemble du répertoire à ReplicatedStorage afin que tous les packages soient disponibles pour tous les scripts, mais vous pouvez préférer ajouter des packages spécifiques à ServerScriptService ou StarterPlayerScripts :
{
"name": "my-new-experience",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"Shared": {
"$path": "src/shared"
},
"Packages": {
"$path": "Packages"
}
},
...
}
}
Vous pouvez ensuite nécessiter des packages dans vos scripts tout comme tout autre ModuleScript :
local Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local React = require(ReplicatedStorage.Packages.react)local ReactRoblox = require(ReplicatedStorage.Packages["react-roblox"])local handle = Instance.new("ScreenGui", Players.LocalPlayer.PlayerGui)local root = ReactRoblox.createRoot(handle)local helloFrame = React.createElement("TextLabel", {Text = "Hello World!",Size = UDim2.new(0, 200, 0, 200),Position = UDim2.new(0.5, 0, 0.5, 0),AnchorPoint = Vector2.new(0.5, 0.5),BackgroundColor3 = Color3.fromRGB(248, 217, 109),Font = Enum.Font.LuckiestGuy,TextSize = 24})root:render(helloFrame)
Comme la plupart des autres projets logiciels, l'objectif est que les contributeurs puissent cloner un référentiel, installer Rokit, exécuter quelques commandes et disposer du même environnement de développement que le reste de l'équipe.
Contrôle de version
Avoir un ensemble de fichiers texte brut sur votre ordinateur débloque une variété de capacités, mais la principale est le contrôle de version. Vous pouvez stocker vos fichiers dans un référentiel Git ou Mercurial ; héberger des référentiels distants et examiner les changements de code dans GitHub, GitLab ou Bitbucket ; et utiliser n'importe quel éditeur de texte que vous aimez.
Visual Studio Code et Cursor ont l'écosystème d'extensions le plus vaste, mais Sublime Text et Notepad++, ainsi que Vim sont également des choix populaires. Quel que soit l'éditeur que vous choisissez, pour égaler les capacités de l'éditeur de scripts Studio, vous aurez besoin de quelques extensions.
Vous pourriez également envisager d'ajouter :
- Un linter comme selene pour attraper des problèmes courants et appliquer des normes de codage
- Un formateur de code comme StyLua
- Un serveur de langage comme Luau Language Server pour l'autocomplétion, la vérification de types, et plus
- Des scripts Open Cloud (non synchronisés avec Studio) pour mettre à jour un jeu publié ou redémarrer des serveurs
Tout annuler
Puisque les outils tiers synchronisent les changements de nouveau vers Roblox Studio plutôt que de le remplacer, aucune partie de ce flux de travail n'implique de verrouillage. À tout moment, vous pouvez arrêter d'utiliser un ou tous ces outils et revenir à l'édition de votre jeu exclusivement dans Studio. L'absence de risque rend l'expérimentation avec des outils tiers particulièrement attrayante.