Diese Seite enthält Informationen, die erfahrenen Unity-Entwicklern helfen, mit Roblox zu beginnen, einschließlich grundlegender Orientierung, einer konzeptionellen Vergleich und den wichtigsten Unterschieden zwischen den beiden Plattformen.
Sich orientieren


Unitys Hierarchy-Fenster und Robloxs Studio Explorer sind die Hauptfenster zur Organisation von Elementen in 3D-Szenen:
- Beide ermöglichen es Ihnen, Objekte zu verwalten und zu organisieren (zum Beispiel Charaktere und Umgebungsassets).
- Beide verwenden eine Baumstruktur für die Eltern-Kind-Beziehungen zwischen Objekten.
Das Hierarchy-Fenster hat jedoch keine vordefinierte Struktur, während das Explorer-Fenster eine strikte Struktur hat. Es könnte hilfreich sein, das Explorer-Fenster als eine Kombination von Unitys Hierarchy- und Project-Fenstern zu betrachten, mit dem Workspace-Ordner als dem erkennbarsten Element.
Ähnlich überlappen der Roblox Studio Asset Manager und die Toolbox das Unity Project-Fenster. Der Asset Manager ermöglicht es Ihnen, alle Assets innerhalb Ihres Spiels zu verwalten, während die Toolbox Ihnen den Zugriff auf alle veröffentlichten Assets ermöglicht. Die Toolbox erlaubt es Ihnen auch, im Creator Store nach Assets von Roblox oder der Community zu suchen, ähnlich dem Unity Asset Store.
Philosophische Unterschiede
Roblox ist eine "Simulationsmaschine" und kein traditioneller Spielmotor. Unity GameObjects und Roblox Parts dienen beide als grundlegende Bausteine für die Erstellung von Objekten in einer 3D-Umgebung, aber in der Praxis sind die beiden ziemlich unterschiedlich:
- Darstellung: GameObjects in Unity sind ein höheres Konzept für jedes Objekt in einer Szene, während Parts in Roblox dazu gedacht sind, physische Objekte wie Holzblöcke und Plastikblasen darzustellen, anstatt abstrakte Geometrie wie primitive Objekte in Unity.
- Physik: Um physikalische Simulationen in Unity auszuführen, hängen Sie Komponenten wie Rigidbody und Collider an ein GameObject. In Roblox sind die physikalischen Interaktionen in den Parts-Datentyp integriert; die Engine erledigt die Interaktionen automatisch.
Sie können den Unterschied sofort erkennen, wenn Sie ein GameObject und ein Part erstellen. Das GameObject hat nichts mehr als eine Position, Rotation und Skalierung. Das Part hat die gleichen Informationen - plus ein Material und eine Farbe, Werte für Reflexion und Transparenz, Masse und Form und vieles mehr. Ein Part in etwas mehr verwandeln, das einem leeren GameObject ähnelt, bedeutet, eine Menge integrierter Eigenschaften zu entfernen. Umgekehrt können Sie ein GameObject erstellen, das einem Part sehr ähnlich sieht, indem Sie MeshFilter, MeshRenderer, Collider und Rigidbody-Komponenten hinzufügen.
Aus Sicht des Skripts ist GameObject dem Roblox Instance am ähnlichsten, der Basisklasse für alle anderen Roblox-Klassen, aber da Sie keine Objekte vom Typ Instance erstellen (und können), ist der Vergleich nicht besonders praktisch.
Ein weiterer Vergleich ist das Unity GameObject mit dem Roblox Model. Modelle fungieren als Container für eine Sammlung von miteinander verbundenen Teilen, ähnlich wie Sie eine Eltern-Kind-Beziehung zwischen vielen GameObjects in Unity herstellen würden. Sie geben eines der Teile des Modells als Primärteil an, um den Drehpunkt zu definieren. Modelle enthalten außerdem Skripte, Animationen, Soundeffekte, Eingabeaufforderungen, Einschränkungen, Partikelemitter und mehr.
Zum Beispiel könnte ein Unity GameObject Komponenten für ParticleSystem, Physics3D, SpringConstraint und ein Skript haben. Im Hierarchie-Fenster sehen Sie ein einzelnes GameObject mit dem Namen SpringyFireball. Im Inspektor-Fenster werden die Sammlung von Komponenten und Eigenschaften angezeigt.
In Roblox könnte ein vergleichbares SpringyFireball-Modell im Explorer-Fenster so aussehen:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
Die Philosophie von Roblox, dass Physik standardmäßig gilt, erstreckt sich auf den Prozess des Bauens von 3D-Modellen. In Roblox ist das Zusammenschweißen mehrerer Teile zu einer Montage eine hervorragende Möglichkeit, Dinge schnell zu bauen, da Roblox die geschweißten Teile als einen einzigen starren Körper behandelt. Dieser Ansatz ist in Unity nicht verfügbar.
Anstelle von standardmäßigen metrischen Einheiten für Länge und Masse verwendet Roblox hypothetische Einheiten namens Studs und Roblox-Masseneinheiten (RMUs). Für ungefähre metrische Umrechnungen und Empfehlungen zur Nutzung siehe Einheiten.
Der Standort ist wichtig
Roblox-Spiele sind standardmäßig Mehrspieler, daher enthält Roblox Studio viele verschiedene Speicherorte mit spezifischem Verhalten. Für weitere Informationen siehe Client-Server-Laufzeit und Objektorganisation.
| Location | Description |
|---|---|
| Workspace | Stellt die 3D-Welt des Spiels dar. Dieser Ort eignet sich gut für Server-Skripte, die direkt an Objekte angehängt werden und deren Verhalten steuern. |
| ReplicatedFirst | Enthält Objekte, die zuerst an den Client repliziert werden. Dieser Ort ist ideal für die absolut minimale Menge an Objekten und Client-Skripten, die erforderlich sind, um einen Ladebildschirm anzuzeigen. |
| ReplicatedStorage | Enthält Objekte, die sowohl an den Client als auch an den Server repliziert werden. Dieser Ort ist ideal für ModuleScripts, die sowohl auf dem Server als auch auf dem Client verwendet werden sollen. LocalScripts werden von diesem Ort aus nicht ausgeführt, aber Scripts mit einem RunContext von Client tun dies. |
| ServerScriptService | Enthält Server-Skripte. Dieser Ort ist ideal für Skripte, die auf serverseitige Funktionen oder Objekte zugreifen müssen, wie Spiel-Logik und Cloud-Speicherung. |
| ServerStorage | Enthält serverseitige Objekte. Dieser Ort ist ideal für große Objekte, die nicht sofort an Clients repliziert werden müssen, wenn sie einem Spiel beitreten. Skripte werden von diesem Ort aus nicht ausgeführt, aber Sie können serverseitige ModuleScripts hier speichern. |
| StarterPlayer ⟩ StarterCharacterScripts | Enthält LocalScripts, die ausgeführt werden, wenn der Charakter erscheint. |
| StarterPlayer ⟩ StarterPlayerScripts | Enthält allgemeine LocalScripts, die ausgeführt werden, wenn der Spieler dem Spiel beitritt. |
| StarterGui | Enthält GUI-Elemente, die der Client anzeigt, wenn er das Spiel lädt. LocalScripts können von diesem Ort aus ausgeführt werden. Dieser Ort ist ideal für Skripte, die die Benutzeroberfläche des Spiels ändern, wie das Hinzufügen von Schaltflächen, Menüs und Pop-ups. |
| StarterPack | Enthält in der Regel nur Tools, kann aber auch LocalScripts für die Einrichtung von Spieler-Rucksäcken beinhalten. |
Scripting
Roblox-Spiele unterstützen drei verschiedene Arten von Luau-Skripten:
Client-Skripte
Diese Skripte werden auf dem Client ausgeführt, und der Server hat keine Sichtbarkeit in ihr Verhalten. Aus historischen Gründen können diese Skripte die Form von LocalScripts oder Scripts mit einem RunContext-Wert von Client annehmen. Client-Skripte befinden sich typischerweise in ReplicatedStorage, StarterPlayerScripts oder StarterCharacterScripts.
Server-Skripte
Diese Skripte werden auf dem Server ausgeführt, und der Client hat keine Sichtbarkeit in ihr Verhalten. Server-Skripte haben einen RunContext-Wert von Server und befinden sich typischerweise in ServerScriptService, deren Inhalte nicht an den Client übertragen werden.
Modul-Skripte
Diese Skripte sind wiederverwendbare Codeabschnitte, die genau einen Wert zurückgeben, typischerweise eine Funktion oder Tabelle (oder eine Tabelle von Funktionen). Anstatt Code in Client- und Server-Skripten zu duplizieren, verwenden Sie Modul-Skripte, um Code und Daten zwischen den beiden zu teilen. Modul-Skripte befinden sich oft in ReplicatedStorage, können aber auch an anderen Orten leben, wenn Sie Code zwischen Skripten auf der gleichen Seite der Client-Server-Grenze teilen möchten.
Unity hat nicht das Konzept verschiedener Skripttypen. Wenn Sie sich entscheiden, ein Mehrspielerspiel zu erstellen, verwendet Unity seine Netzwerkbibliotheken, um anzuzeigen, wann ein GameObject (und seine Skripte) ausschließlich auf dem Server verfügbar sein sollte.
In Unity sind viele der Funktionalitäten der Engine über die Methoden von MonoBehaviour verfügbar. Zum Beispiel, um Code vor der Render-Schleife auszuführen, fügen Sie Code zur Methode Update() hinzu. Um Ereignisse der physikalischen Kollision zu behandeln, fügen Sie Code zur Methode OnCollideEnter() hinzu.
Roblox-Skripte sind ereignisgesteuerter. Sie greifen auf ähnliche Funktionen zu, indem Sie sich bei Diensten anmelden und auf Updates hören.
C# und Luau
Für das Scripting verwendet Unity C#. Roblox verwendet Luau, eine Skriptsprache, die von Lua 5.1 abgeleitet ist.
Im Vergleich zu C# ist Luau allmählich typisiert und hat im Allgemeinen eine weniger ausführliche Syntax. In größeren Projekten kann das allmähliche Typisieren jedoch Kategorien von Fehlern einführen, die stark typisierte Sprachen wie C# vermeiden. Daher sollten Sie in Roblox-Skripten strenge Typüberprüfung aktivieren.
Für grundlegende Syntaxunterschiede zwischen den Skriptsprachen siehe Luau und C#-Vergleich.
Luau-Codebeispiel
The following Luau code sample demonstrates how to, after a player equips a fishing pole, listen for user input (in this case, the E key) and call additional functions:
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Get a module script from ReplicatedStorage that returns a single function
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Assumes that this script is a child of the fishing pole
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Check that the key is down, then call another function
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Only enable the action when the player equips the fishing pole
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Disable the action when the player unequips the fishing pole
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
Das Roblox-Skript kann relativ prägnant sein, da Roblox viele integrierte Annahmen hat: ein Player mit einem Humanoid-Charakter, der mit dem Server verbunden ist, und Tools ausrüsten kann. Diese Annahmen existieren nicht in Unity, sodass die Implementierung sehr unterschiedlich wäre.
Assets
Unity und Roblox unterstützen beide den Import benutzerdefinierter Meshes und Modelle im .fbx-Format. Bestimmte Arten von Assets erfordern möglicherweise spezifische Konfigurationen und Exporteinstellungen aus Ihrer Drittanbieter-Modellierungssoftware. Für weitere Informationen siehe die folgenden Seiten:
In Unity importieren Objekte in Ihr Assets-Verzeichnis, das im Project-Fenster sichtbar ist. In Roblox importieren Assets in Ihr Workspace und in die Toolbox oder den Asset Manager.
Roblox bietet auch ein Open-Source Blender-Plugin, um den Importprozess zu optimieren.
Transforms
Unity’s Transformation und Roblox's CFrames dienen ähnlichen Zwecken beim Darstellen von 3D-Transformationen von Objekten:
- Sowohl Transformationen als auch CFrames repräsentieren die Position und Rotation eines Objekts im 3D-Raum. Transformationen beinhalten Skala, während Roblox eine BasePart.Size-Eigenschaft verwendet, die nicht Teil des CFrame ist.
- Beide unterstützen die Multiplikation für komplexe Transformationen und haben integrierte Methoden für andere Manipulationen.
Zusammenarbeit
In Unity arbeiten Sie mit standardmäßigen Versionskontrollsystemen oder kostenpflichtigen Diensten wie Unity Version Control zusammen.
Roblox-Dateien leben in der Cloud (obwohl Sie Kopien exportieren können), sodass Roblox Studio integrierte Zusammenarbeit-Workflows für gleichzeitiges Bearbeiten, Gruppenmanagement, Berechtigungen, Skriptentwurf und mehr bietet. Siehe Zusammenarbeit.
Plugins
Ähnlich wie Unity-Tools unterstützt Roblox Studio Plugins, die verschiedene Aspekte des Entwicklungsprozesses vereinfachen oder Ihnen mehr Kontrolle darüber geben können. Plugins sind im Creator Store verfügbar, genau wie Assets, viele davon kostenlos.
Glossar
| Unity | Roblox | Hinweise |
|---|---|---|
| Szene | Place | |
| GameObject | Part oder Model | Siehe Philosophische Unterschiede. |
| Prefab | Package | |
| Transform | CFrame | CFrame enthält keine Skalierungsinformationen. Siehe Transforms. |
| Hierarchie | Explorer | |
| Inspektor | Properties | |
| Szenenansicht | 3D-Ansicht | |
| Spielansicht | 3D-Ansicht | Die Ansicht wechselt in eine Spielansicht, wenn Sie Ihr Spiel testen. |
| Projektfenster | Asset Manager oder Toolbox | |
| Terrain-Inspektor | Terrain Editor | |
| Spawn-Punkt | SpawnLocation | |
| Konsole | Output | |
| Asset Store | Creator Store | |
| Overlays | Toolbar | |
| Werkzeug | Plugin |