Diese Seite enthält Informationen, die erfahrenen Unity-Entwicklern helfen, mit Roblox zu beginnen: eine grundlegende Orientierung, einen konzeptionellen Vergleich und wichtige Unterschiede zwischen den beiden Plattformen.
Orientieren Sie sich
Das Hierarchiefenfenster von Unity und der Explorer von Roblox Studio sind die primären Fenster für die Organisation von Elementen in 3D-Szenen:
- Beide ermöglichen es Ihnen, Objekte zu verwalten und zu organisieren (zum Beispiel Charaktere und Umweltressourcen).
- Beide verwenden eine Baumstruktur für die Eltern-Kind-Beziehungen zwischen Objekten.
Das Hierarchie-Fenster hat jedoch keine vordefinierte Struktur, während das Explorer-Fenster eine strengere Struktur hat.Es könnte helfen, das Explorer-Fenster als Kombination aus Unities Hierarchie und Projektfenstern zu betrachten, mit dem Arbeitsplatz-Ordner als das am leichtesten erkennbare Element.
Ebenso überlappen der Roblox Studio Asset-Manager und Toolbox mit dem Unity-Projekt-Fenster.Der Asset-Manager lässt dich alle Assets innerhalb deiner Erlebnisverwalten, während die Toolbox dir den Zugriff auf alle veröffentlichten Assets ermöglicht.Die Toolbox ermöglicht es Ihnen auch, im Creator-Store nach Assets von Roblox oder der Community zu suchen, ähnlich wie im Unity-Asset-Store.
Philosophische Unterschiede
Roblox ist eine "SimulationsEngine" und nicht eine traditionelle SpielEngine.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:
- Repräsentation : GameObjects in Unity sind ein höheres Konzept für jedes Objekt in einer Szene, während Parts in Roblox entwickelt wurden, um physische Objekte wie Holzblöcke und Plastiksphären zu repräsentieren, anstatt abstrakte Geometrie wie primitive Objekte in Unity.
- Physik : Um Physiksimulationen in Unity durchzuführen, fügst du Komponenten wie Rigidbody und Collider einem GameObject hinzu.In Roblox sind Physik in den Parts Daten eingebenintegriert; die Engine verwaltet Interaktionen automatisch.
Du kannst den Unterschied sofort sehen, wenn du ein GameObject und ein Part erstellst.Die GameObject hat nichts mehr als eine Position, Größenverhältnisund Skalierung.Die Part hat die gleiche Information - plus ein Material und eine Farbe, Werte für Reflexion und Transparenz, Masse und Form und vieles mehr.Ein Part in etwas Ähnliches zu verwandeln, wie eine leere GameObject bedeutet, entfernt viele integrierte Eigenschaften.Umgekehrt kannst du ein GameObject machen, das einem Part sehr ähnlich sieht, indem du MeshFilter , MeshRenderer , Collider und Rigidbody Komponenten hinzufügst.
Aus einer Skriptperspektive ist GameObject am ähnlichsten mit der Roblox Instance, der Basisklasse für alle anderen Roblox-Klassen, aber weil du keine Objekte vom Typ Instance erstellen kannst (und nicht kannst), ist die Vergleich nicht besonders praktisch.
Ein weiterer Vergleich ist die Einheit GameObject mit der Roblox Model.Modelle fungieren als Container für eine Sammlung von miteinander verbundenen Teilen auf die gleiche Weise, wie Sie eine Eltern-Kind-Beziehung zwischen vielen GameObjects in Unity herstellen könnten.Du gibst eines der Teile des Modells als seine primäre Teile an, um den Drehpunkt zu definieren.Modelle enthalten auch Skripte, Animationen, Soundeffekte, Eingabeaufforderungen, Einschränkungen, Partikelstrahler und mehr.
Zum Beispiel könnte ein Unity GameObject Komponenten für ParticleSystem , Physics3D , SpringConstraint und ein Skript, das. PL: die Skriptshaben.Im Hierarchiefen-Fenster siehst du eine einzige GameObject mit dem Namen SpringyFireball.Das Inspector-Fenster zeigt die Sammlung von Komponenten und Eigenschaften an.
In Roblox könnte ein vergleichbares SpringyFireball-Modell im Explorer-Fenster so aussehen:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
Die Physik-Standard-Philosophie von Roblox erstreckt sich auf den Prozess des Aufbaus von 3D-Modellen.In Roblox ist das Schweißen mehrerer Teile zusammen in eine Montagemaschine ein ausgezeichneter Weg, um Dinge schnell zu bauen, weil Roblox die geschweißten Teile als einen einzigen steifen Körper behandelt.Dieser Ansatz ist in Unity nicht verfügbar.
Anstatt Standard-Metrik-Einheiten für Länge und Masse zu verwenden, verwendet Roblox notionale Einheiten namens Stollen und Roblox-Massen-Einheiten (RMUs).Für annähernde metrische Umwandlungen und Empfehlungen rund um die Verwendung siehe Einheiten.
Ortsangelegenheiten
Roblox-Erlebnisse sind standardmäßig Mehrspieler, sodass Roblox Studio viele verschiedene Speicherorte mit spezifischen Verhaltensweisen enthält.Zum Beispiel könnte ein Skript ausgeführt werden, wenn du es in ReplicatedStorage legst, aber nicht, wenn du es in StarterPlayerScripts legst.Weitere Informationen finden Sie unter Client-Server-Laufzeit und Objekt-Organisation.
Ort | Beschreibung :--- | :--- Arbeitsbereich | Vertreibt die Welt.Dieser Ort funktioniert gut für Server-Skripte, die direkt an Objekte anhängen und ihr Verhalten steuern.ReplicatedFirst | Enthält Objekte, die sich zuerst auf den Client replizieren, bevor irgendetwas anderes passiert.Dieser Ort ist ideal für das absolute Minimum an Objekten und Client-Skripten, die zum Anzeigen eines Ladebildschirms erforderlich sind.ReplicatedStorage | Enthält Objekte, die sowohl auf den Client als auch auf den Server repliziert werden.Dieser Ort ist ideal für Class.ModuleScript\|ModuleScripts, den Sie sowohl auf dem Server als auch auf dem Client verwenden möchten.Class.LocalScript\|LocalScripts laufe nicht von diesem Ort weg, aber Class.Script\|Scripts mit einem Laufkontext von Client tue es.ServerScriptService | Enthält Server-Skripte.Dieser Ort ist ideal für Skripte, die auf serverseitige Funktionalität oder Objekte zugreifen müssen, wie z. B. Spiellogik und Cloud-Speicher.ServerStorage | Enthält Server-seitige Objekte.Dieser Ort ist ideal für große Objekte, die nicht sofort auf Kunden repliziert werden müssen, wenn sie sich einem Erlebnis anschließen.Skripte laufen nicht von diesem Ort aus, aber du kannst die serverseitige Class.ModuleScript\|ModuleScripts hier speichern.StarterPlayer.StarterCharacterScripts | Enthält Class.LocalScript\|LocalScripts, die laufen, wenn der Charakter spawnt.StarterPlayer.StarterPlayerScripts | Enthält allgemeine Zwecke Class.LocalScript\|LocalScripts, die ausgeführt werden, wenn der Spieler der Erfahrung beitritt.StarterGui | Enthält GUI-Elemente, die der Client anzeigt, wenn er das Spiel laden.Class.LocalScript\|LocalScripts kann von diesem Ort aus ausgeführt werden.Dieser Ort ist ideal für Skripte, die die Benutzeroberfläche des Spiels modifizieren, wie z. B. das Hinzufügen von Schaltflächen, Menüs und Popups.StarterPack | Enthält im Allgemeinen nur Class.Tool\|Tools, kann aber auch Class.LocalScript\|LocalScripts enthalten, um Spielerrucksäcke einzurichten.
Skripte
Roblox-Erlebnisse unterstützen drei verschiedene Arten von Luau-Skripten:
Client-Skripte
Diese Skripte laufen auf dem Client und der Server hat keine Sicht auf ihr Verhalten.Aus veralteten Gründen können diese Skripte die Form von LocalScripts oder Scripts mit einem RunContext Wert von Client annehmen.Client-Skripte leben typischerweise in ReplicatedStorage , StarterPlayerScripts oder StarterCharacterScripts .
Server-Skripte
Diese Skripte laufen auf dem Server und der Client hat keine Sicht auf ihr Verhalten.Server-Skripte haben einen RunContext Wert von Server und leben typischerweise in ServerScriptService, deren Inhalt nicht auf den Spielclient repliziert wird.
Modul-Skripte
Diese Skripte sind wiederverwendbare Teile von Code, die genau einen Wert zurückgeben, typischerweise eine Funktion oder Tabelle (oder eine Tabelle von Funktionen).Anstatt Code in Client- und Serverskripts zu duplizieren, verwende Modulskripte, um Code und Daten zwischen den beiden zu teilen.Modul-Skripte leben oft in ReplicatedStorage, aber sie können an anderer Stelle leben, wenn Sie Code zwischen Skripten auf derselben Seite der Client-Server-Grenze teilen möchten.
Unity hat nicht das Konzept verschiedener Skripttypen.Wenn du dich dafür entscheidest, ein Mehrspieler-Spiel zu erstellen, verwendet Unity seine Netzwerkbibliotheken, um anzuzeigen, wann ein GameObject (und seine Skripte) exklusiv für den Server sein sollten.
In Unity ist viel der Funktionalität 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 Physik-Kollisionsereignisse zu behandeln, fügst du Code zur OnCollideEnter()-Methode hinzu.
Roblox-Skripte sind eherereignisgesteuert. Du hast Zugriff auf ähnliche Funktionen, indem du dich für Dienste abonnierst und auf Updates wartest.
C# und Luau
Für Scriptingverwendet Unity C#. Roblox verwendet Luau, eine Skriptsprache, die aus Lua 5.1 entwickelt wurde.
Im Vergleich zu C# wird Luau schrittweise getippt und hat im Allgemeinen eine weniger verbale Syntax.In größeren Projekten kann jedoch die schrittweise Eingabe Kategorien von Fehlern einführen, die stark typierte Sprachen wie C# vermeiden, also aktivieren Sie strenges Typenprüfen in Roblox-Skripten.
Für grundlegende Syntax-Unterschiede zwischen den Skriptsprachen siehe Vergleich von Luau und C#.
Luau-Code-Beispiel
Das folgende Luau-Codebeispiel zeigt, wie man danach, nachdem ein Spieler eine Angelrute ausgerüstet hat, auf die Eingabe des Benutzers (in diesem Fall die Schlüssel) hört und zusätzliche Funktionen aufruft:
-- Hole dir die notwendigen Spieldienste
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Holen Sie sich ein Modulskript von ReplicatedStorage, das eine einzige Funktion zurückgibt
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Nehme an, dass dieses Skript ein Kind des Angelrutes ist
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Überprüfe, dass der Schlüssel unten ist, und rufe dann eine andere Funktion auf
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Aktiviere die Aktion nur, wenn der Spieler die Angelrute ausrüstet
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Deaktiviere die Aktion, wenn der Spieler die Angelrute abnimmt
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
Das Roblox-Skript kann relativ knapp gehalten werden, da Roblox viele eingebaute Annahmen hat: ein Player mit einem Humanoid -Zeichen, das mit dem Server verbunden ist, und kann Tools ausrüsten.Diese Annahmen existieren in Unity nicht, die Umsetzung wäre also sehr unterschiedlich.
Vermögenswerte
Unity und Roblox unterstützen beide das Importieren von benutzerdefinierten Meshes und Modellen im .fbx.Bestimmte Arten von Assets können spezielle Konfigurationen und Export-Einstellungen von Ihrer Drittsoftware zur Modellierung erfordern.Für weitere Informationen, siehe die folgenden Seiten:
In Unity importieren Objekte in deinen Assets Ordner, der im Projekt-Fenster sichtbar ist.In Roblox werden Assets in deinen Arbeitsbereich und in die Toolbox oder Inventar Sektion des Asset-Managers importiert.
Roblox bietet auch ein Open-Source-Blender-Plugin an, um den Importprozess zu beschleunigen.
Transformierungen
Die Transformationen von props.engine und Roblox' CFrames dienen ähnlichen Zwecken bei der Darstellung von 3D-Transformierungen von Objekten:
- Sowohl Transformationen als auch CFrames repräsentieren die Position und Rotation eines Objekts im Platz.Transformierungen beinhalten Größenverhältnis, während Roblox eine BasePart.Size Eigenschaft verwendet, die nicht Teil des CFrame ist.
- Beide unterstützen Multiplikation (d.h. Zusammensetzung) für komplexe Transformationen und haben integrierte Methoden für andere Manipulationen.
Zusammenarbeit
In Unity arbeitest du mit Standard-Versionierungssystemen oder bezahlten Diensten wie Unity-Versionierungskontrolle zusammen.
Roblox-Dateien leben in der Cloud (obwohl du Kopien exportieren kannst), sodass Roblox Studio integrierte Collaboration-Workflows für gleichzeitige Bearbeitung, Gruppenmanagement, Berechtigungen, Skriptentwurf und mehr bietet.Siehe Zusammenarbeit.
Plugins
Ähnlich wie bei Unity-Tools unterstützt Roblox Studio Plugins, die die Arbeit erleichtern oder Ihnen zusätzliche Kontrolle über verschiedene Aspekte des Entwicklungsprozesses geben können.Plugins sind im Creator-Store verfügbar, genau wie Assets, viele Gratis.
Wörterbuch
| Einheit | Roblox | Notizen | | :--- | :--- | :--- | | Szene | Platz | | | Spielobjekt | Part oder Model | Siehe philosophische Unterschiede .| | Prefab | Paket | | | Transform | CFrame | CFrame enthält keine Skalierungsinformationen.Siehe Transformierungen.| | Hierarchie-Fenster | Explorer-Fenster | | | Inspector | Eigenschaften-Fenster | | Scene-Ansicht | Ansichtsfenster | | | Spielansicht | Ansichtsfenster | Die Ansichtsfenster wechseln in eine Spielansicht, wenn du deine Erlebnistestest.| | Projektfenster | Asset-Manager oder Toolbox | | | Terrain-Inspektor | Terrain-Editor | | | Spawn-Punkt | SpawnLocation | | | Konsole | Ausgabe | | | Asset-Store | Creator-Store | | | Überlagerungen | Menüleiste | | | Werkzeug | Plugin | |