Roblox pour les développeurs d'Unity

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Cette page inclut des informations pour aider les développeurs d'Unity 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é

La fenêtre hiérarchie d'Unity et l'explorateur de Roblox Studio sont les fenêtres principales pour organiser les éléments dans les scènes 3D :

  • Les deux vous permettent de gérer et d'organiser des objets (par exemple, des personnages et des ressources environnementales).
  • Les deux utilisent une structure d'arbre pour les relations parent-enfant entre les objets.

Cependant, la fenêtre hiérarchie n'a pas de structure prédéfinie, tandis que la fenêtre Explorateur a une structure stricte.Il pourrait aider à penser à la fenêtre Explorateur comme une combinaison des fenêtres Hierarchie et Projet d'Unity, avec le dossier Espace de travail comme l'élément le plus reconnaissable.

De même, le gestionnaire des ressources Roblox Studio et la boîte à outils se chevauchent avec la fenêtre du projet Unity.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é, similaire à la boutique des ressources d'Unity.

Différences philosophiques

Roblox est un « moteur de simulation » plutôt qu'un moteur de jeu traditionnel.Unity GameObjects et Roblox Parts servent tous deux de blocs de construction fondamentaux pour créer des objets dans un environnement 3D, mais en pratique, les deux sont très différents :

  • Représentation : GameObjects dans Unity sont un concept de plus haut niveau pour tout objet dans une scène, alors que Parts dans Roblox sont conçus pour représenter des objets physiques comme des blocs en bois et des sphères en plastique, plutôt que de la géométrie abstraite comme des objets primitifs dans Unity.
  • Physique : Pour effectuer des simulations de physique dans Unity, vous attachez des composants comme Rigidbody et Collider à un GameObject .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 GameObject et un Part.Le GameObject n'a rien de plus qu'une position, 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.Transformer un Part en quelque chose de plus semblable à un vide GameObject signifie enlever beaucoup de propriétés intégrées.Inversement, vous pouvez créer un GameObject qui ressemble beaucoup à un Part en ajoutant MeshFilter , MeshRenderer , Collider , et Rigidbody composants à lui.

Du point de vue du scriptage, GameObject est le plus similaire au Roblox Instance, la classe de base pour toutes les autres ClassesRoblox, mais parce que vous ne créez pas (et ne pouvez pas) d'objets de type Instance, la comparaison n'est pas spécialement pratique.

Une autre comparaison est l'Unité GameObject à la Roblox Model .Les modèles agissent comme un conteneur pour une collection de parties interconnectées de la même manière que vous pourriez établir une relation parent-enfant entre de nombreuses GameObjects dans Unity.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, une unité GameObject pourrait avoir des composants pour ParticleSystem , Physics3D , SpringConstraint , et un script.Dans la fenêtre hiérarchie, vous voyez un seul GameObject nommé SpringyFireball.La fenêtre Inspecteur affiche la collection de composants et de propriétés.

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 disponible dans Unity.

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 placez dans ReplicatedStorage , mais pas lorsque vous le placez 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.

Unity n'a pas le concept de différents types de scripts.Si vous choisissez de créer un jeu multijoueur, Unity utilise ses bibliothèques de réseau pour indiquer quand un GameObject (et ses scripts) devrait être exclusif au serveur.

Dans Unity, une grande partie de la fonctionnalité du moteur est disponible via les méthodes de MonoBehaviour .Par exemple, pour exécuter du code avant la boucle de rendu, vous ajoutez du code à la méthode Update().Pour gérer les événements de collision physique, vous ajoutez du code à la méthode OnCollideEnter().

Les scripts de Roblox sont plus axés événementiel. Vous accédez à une fonctionnalité similaire en vous abonnant à des services et en écoutant les mises à jour.

C# et Luau

Pour le scripting, Unity utilise C#. Roblox utilise Luau, une langue de scriptage dérivée de Lua 5.1.

Par rapport à C#, Luau est progressivement typé et a généralement 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 C# évitent, alors envisagez d'activer le contrôle de type strict dans les scripts Roblox.

Pour les différences de syntaxe de base entre les langages de script, voir comparaison Luau et C#.

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 Unity, donc la mise en œuvre serait très différente.

Actifs

Unity 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 Unity, les objets s'importent dans votre répertoire Assets visible dans la fenêtre Projet.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.

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 Unity, vous collaborez avec des systèmes de contrôle de version standard ou des services payants comme le contrôle de version Unity.

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 aux outils d'Unity, Roblox Studio prend en charge les plugins, qui peuvent simplifier ou vous donner un contrôle supplémentaire sur divers aspects du processus de développement.Les plugins sont disponibles dans la boutique des créateurs, tout comme les ressources, beaucoup d'entre elles gratuitement.

Glossaire

| Unité | Roblox | Notes | | :--- | :--- | :--- | | Scène | Lieu | | | GameObject | Part ou Model | Voir différences philosophiques .| | Prefab | Package | | | Transformer | CFrame | CFrame n'inclut pas d'information sur l'échelle.Voir transformations .| | Fenêtre hiérarchique | Fenêtre Explorateur | | | Inspecteur | Fenêtre propriétés | | Vue de scène | Vueport | | Vue de jeu | Vueport | La fenêtre Vueport se transforme en vue de jeu lorsque vous testez votre expérience.| | Fenêtre du projet | Gestionnaire des ressources ou Boîte à outils | | | Inspecteur du terrain | Éditeur du terrain | | | Point d'apparition | SpawnLocation | | | Console | Sortie | | | Magasin de ressources | Magasin des créateurs | | | Superpositions | Barre de menu | | | Outil | Plugin | |