Cette page inclut des informations pour aider les développeurs d'Unreal Engine expérimentés à commencer avec Roblox : une orientation de base, une comparaison conceptuelle et des différences clés entre les deux plateformes.
Soyez orienté
L'éditeur d'aperçu d'Unreal et l'explorateur de Roblox Studio sont les principales fenêtres pour organiser les éléments dans des espaces 3D.Les deux affichent une hiérarchie d'objets et de dossiers.Cependant, Outliner a une structure plus plate et moins définie et ne montre que Actors .La fenêtre Explorateur a une structure profondément imbriquée et stricte et affiche tous les objets comme faisant partie de la hiérarchie, même les objets qui seraient considérés comme des composants dans Unreal.
Le gestionnaire des ressources Roblox Studio et la boîte à outils se chevauchent avec le navigateur de contenu Unreal.Le gestionnaire des ressources vous permet de gérer toutes les ressources dans votre expérience, tandis que la boîte à outils vous permet d'accéder à toutes les ressources que vous avez publiées.La boîte à outils vous permet également de rechercher dans la boutique des créateurs des ressources de Roblox ou de la communauté.La boutique des créateurs est similaire à la boutique du marché d'Unreal Engine, mais vous pouvez y accéder directement à partir de l'interface utilisateur Studio.
Différences philosophiques
Roblox est un « moteur de simulation » plutôt qu'un moteur de jeu traditionnel.Unreal Actors et Roblox Parts servent tous deux de blocs de construction fondamentaux, mais en pratique, les deux sont très différents :
- Représentation : Actors dans Unreal sont un concept de plus haut niveau pour tout objet dans un niveau, tandis que Parts dans Roblox sont conçus pour représenter des objets physiques comme des blocs en bois et des sphères en plastique.
- Physique : Pour effectuer des simulations de physique dans Unreal, vous activez la physique dans certaines composantes (comme le StaticMeshComponent ) ou en ajoutant des composantes à Actors , telles que des contraintes de physique.Dans Roblox, la physique est intégrée au taperde données Parts ; le moteur gère les interactions automatiquement.
Vous pouvez voir la différence immédiatement si vous créez un Actor et un Part.Le Actor a peu plus qu'une localisation, une rotation et une redimensionner.Le Part a les mêmes informations — plus un matériau et une couleur, des valeurs pour la réflectance et la transparence, la masse et la forme, et bien plus encore.Les deux ne commencent à partager des propriétés similaires que lorsque vous comparez un StaticMeshActor dans Unreal (par exempleun cube) à un MeshPart dans Roblox.


Une autre comparaison utile est l'Unreal Actor à la Roblox Model .Les modèles agissent comme un conteneur pour une collection de parties interconnectées de la même manière que Actors dans Unreal sont des conteneurs pour les composants.Vous spécifiez une des parties du modèlisationcomme sa partie principale pour définir le point de pivot.Les modèles contiennent également des scripts, des animations, des effets sonores, des invites, des contraintes, des émetteurs de particules et plus encore.
Par exemple, un Unreal Actor pourrait avoir un NiagraComponent qui utilise plusieurs émetteurs pour obtenir l'effet visuel souhaité, un maillage pour la forme, une contrainte physique pour ajouter de l'élasticité et un script pour l'interactivité du joueur.Dans Outliner, vous voyez un seul Actor nommé SpringyFireball .
Dans Roblox, un modèle comparable SpringyFireball dans la fenêtre Explorateur pourrait ressembler à ceci :
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
La philosophie de Roblox en matière de physique par défaut s'étend au processus de construction de modèles 3D.Dans Roblox, souder plusieurs parties ensemble dans une assemblage est un excellent moyen de construire rapidement des choses, car Roblox traite les pièces soudées comme un seul corps rigide.Cette approche n'est pas pratique dans Unreal.
Au lieu d'utiliser des unités métriques standard pour la longueur et le poids, Roblox utilise des unités notionales appelées studs et unités de masse Roblox (RMU).Pour les conversions et recommandations métriques approximatives autour de l'utilisation, voir unités.
Les questions de localisation
Les expériences Roblox sont multijoueurs par défaut, de sorte que Roblox Studio inclut de nombreux emplacements de stockage différents avec des comportements spécifiques.Par exemple, un script peut s'exécuter lorsque vous le mettez dans ReplicatedStorage , mais pas lorsque vous le mettez dans StarterPlayerScripts .Pour plus d'informations, voir temps d'exécution client-serveur et organisation d'objets .
Emplacement | Description :--- | :--- Espace de travail | Représente le monde du jeu.Cet emplacement fonctionne bien pour les scripts du serveur qui s'attachent directement aux objets et contrôlent leur comportement.ReplicatedFirst | Contient des objets qui se répliquent vers le client avant toute autre chose.Cet emplacement est idéal pour le minimum absolu de objets et de scripts clients nécessaires pour afficher une page de chargement.ReplicatedStorage | Contient des objets qui sont répliqués à la fois au client et au serveur.Cet emplacement est idéal pour Class.ModuleScript\|ModuleScripts que vous souhaitez utiliser à la fois sur le serveur et le client.Class.LocalScript\|LocalScripts ne s'exécute pas à partir de cet emplacement, mais Class.Script\|Scripts avec un contexte d'exécution de Client le fait.ServerScriptService | Contient des scripts serveur.Ce lieu est idéal pour les scripts qui doivent accéder à la fonctionnalité côté serveur ou aux objets, tels que la logique du jeu et le stockage des données dans le cloud.ServerStorage | Contient des objets côté serveur.Cet emplacement est idéal pour de grands objets qui n'ont pas besoin d'être immédiatement répliqués aux clients lorsqu'ils rejoignent une expérience.Les scripts ne s'exécutent pas à partir de cet emplacement, mais vous pouvez stocker côté serveur Class.ModuleScript\|ModuleScripts ici.StarterPlayer.StarterCharacterScripts | Contient Class.LocalScript\|LocalScripts qui s'exécute lorsque le personnage apparaît.StarterPlayer.StarterPlayerScripts | Contient des scripts à usage général Class.LocalScript\|LocalScripts qui s'exécutent lorsque le joueur rejoint l'expérience.StarterGui | Contient des éléments GUI que le client affiche lorsqu'il charge le jeu.Class.LocalScript\|LocalScripts peut s'exécuter à partir de cet emplacement.Ce lieu est idéal pour les scripts qui modifient l'interface utilisateur du jeu, tels que l'ajout de boutons, de menus et de pop-ups.StarterPack | Contient généralement seulement Class.Tool\|Tools, mais peut également inclure Class.LocalScript\|LocalScripts pour configurer les sacs à dos des joueurs.
Programmation
Les expériences Roblox supportent trois types différents de scripts Luau :
Scripts du client
Ces scripts s'exécutent sur le client, et le serveur n'a pas de visibilité sur leur comportement.Pour des raisons héritées, ces scripts peuvent prendre la forme de LocalScripts ou Scripts avec une valeur RunContext de Client .Les scripts du client vivent généralement dans ReplicatedStorage , StarterPlayerScripts ou StarterCharacterScripts .
Scripts du serveur
Ces scripts s'exécutent sur le serveur, et le client n'a pas de visibilité sur leur comportement.Les scripts du serveur ont une valeur de RunContext de Server et vivent généralement dans ServerScriptService, dont le contenu n'est pas répliqué au client du jeu.
Scripts de module
Ces scripts sont des morceaux de code réutilisables qui retournent exactement une valeur, généralement une fonction ou une table (ou une table de fonctions).Plutôt que de dupliquer le code dans les scripts du client et du serveur, utilisez les scripts de module pour partager le code et les données entre les deux.Les scripts de module vivent souvent dans ReplicatedStorage, mais peuvent vivre ailleurs si vous voulez partager du code entre les scripts du même côté de la frontière client-serveur.
Unreal n'a pas le concept de différents types de scripts.Si vous choisissez de créer un jeu multijoueur, vous écrivez du code supplémentaire pour synchroniser l'état du jeu entre le serveur et les clients.
Dans Unreal, une grande partie de la fonctionnalité du moteur est disponible en étendant les classes intégrées comme UObject , ACharacters , ULevel et UWorld dans C++ ou Blueprint.Unreal prend en charge les événements personnalisés, mais de nombreuses classes incluent des événements que le moteur invoque automatiquement dans le cadre du cycle de vie naturel du niveau.
Par rapport au système de «ticking» irréel, les scripts Roblox sont beaucoup plus événementiels.Vous accédez à une fonctionnalité similaire du moteur en vous abonnant aux services et en écoutant les mises à jour.
C++ et Luau
Pour le scripting, Unreal utilise C++. Roblox utilise Luau , une langue de scriptage dérivée de Lua 5.1 .
Par rapport à Luau, C++ a un avantage de performance global qui peut ou ne peut pas être pertinent pour les types d'expériences que vous souhaitez construire.Luau est progressivement saisi et a une syntaxe moins verbale.Cependant, dans les projets plus importants, le saisissement progressif peut introduire des catégories de bugs que les langages fortement typés comme le C++ évitent, alors envisagez d'activer le contrôle de type strict dans les scripts Roblox.
Unreal inclut également un système de script visuel appelé plans.Roblox a des plugins tiers qui offrent une fonctionnalité similaire, mais pas de système comparable intégré.
Exemple de code Luau
L'exemple de code Luau suivant montre comment, après qu'un joueur ait équipé une canne à pêche, écouter l'entrée de l'utilisateur (dans ce cas, la touche E clé) et appeler des fonctions supplémentaires :
-- Obtenez les services de jeu nécessaires
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Obtenez un script de module de ReplicatedStorage qui renvoie une seule fonction
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Prévoit que ce script est un enfant de la canne à pêche
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Vérifiez que la clé est à terre, puis appelez une autre fonction
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Activer l'action uniquement lorsque le joueur équipe la canne à pêche
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Désactivez l'action lorsque le joueur déséquipe la canne à pêche
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
Le script Roblox peut être relativement concis car Roblox a de nombreuses suppositions intégrées : un Player avec un caractère Humanoid connecté au serveur et peut équiper Tools .Ces hypothèses n'existent pas dans Unreal, donc la mise en œuvre serait très différente.
Actifs
Unreal et Roblox soutiennent tous deux l'importation de mailles et de modèles personnalisés au format .fbx .Certains types de ressources peuvent nécessiter des configurations et des paramètres d'exportation spécifiques de votre logiciel de modélisation tiers.Pour plus d'informations, voir les pages suivantes :
Dans Unreal, l'importation des ressources se fait dans votre répertoire Content, visible dans le navigateur de contenu.Dans Roblox, les ressources sont importées dans votre espace de travail et dans la section boîte à outils ou inventaire de la section gestionnaire des ressources.
Roblox offre également un plugin Blender open source pour rationaliser le processus d'importation, similaire à la fonctionnalité Envoyer à Unreal des outils Blender.
Transformations
Les transformations de props.engine et les services de Roblox CFrames servent à des fins similaires en représentant des transformations 3D d'objets :
- Les deux transformations et CFrames représentent la position et la rotation d'un objet dans l'espace 3D.Les transformations incluent l'redimensionner, tandis que Roblox utilise une propriété BasePart.Size qui n'est pas partie du CFrame.
- Les deux supportent la multiplication (c'est-à-dire la composition) pour les transformations complexes et ont des méthodes intégrées pour d'autres manipulations.
Contribution
Dans Unreal, vous collaborez avec des systèmes de contrôle de version comme Perforce ou SVN, généralement via l'interface utilisateur intégrée d'Unreal.Ces systèmes de contrôle de version utilisent le modèle centralisé de « vérification » qui verrouille les fichiers pendant que une personne travaille dessus.
Les fichiers Roblox vivent dans le cloud (bien que vous puissiez exporter des copies), donc Roblox Studio fournit des flux de travail de collaboration intégrés pour l'édition simultanée, la gestion de groupes, les permissions, la rédaction de scripts et plus encore.Voir collaboration .
Plugins
Semblable à Unreal, Roblox Studio prend en charge plug-ins, ce qui peut simplifier ou vous donner un contrôle supplémentaire sur divers aspects du processus de développement.Les plugins sont disponibles dans le magasin des créateurs, tout comme les ressources, beaucoup gratuitement.
Glossaire
| Réel | Roblox | Notes | | :--- | :--- | :--- | | Niveau | Lieu | | | Acteur | Part ou Model | Voir différences philosophiques .| | Classe de plan | Package | | | Transformer | CFrame | CFrame n'inclut pas d'information sur l'échelle.Voir transformations .| | Outliner | Fenêtre Explorer | | | Panneau de détails | Fenêtre des propriétés | | | Porte de vision du niveau | Porte de vision | | | Navigateur de contenu | Gestionnaire des ressources ou Boîte à outils | | | Mode paysage | Éditeur de terrain | | | PlayerStart | SpawnLocation | | | Journal des sorties | Sortie | | | Marché | Boutique des créateurs | | | Barre de menu | Barre de menu | | | Plugin | Plugin | | | Journal des entrées | Entrée | | |