Skripting in Unity für erfahrene Programmierer
Für Programmierer ohne Unity-Erfahrung
In Unity können Sie mithilfe von Skripten nahezu alle Teile eines Spieles oder interaktiven Echtzeitinhalts entwickeln. Unity unterstützt Scripting in C#.Es gibt zwei Möglichkeiten, C#-Skripte in Unity aufzubauen: objektorientiertes Design – der traditionelle, gängigste Ansatz – und datenorientierte Entwicklung – jetzt in Unity für bestimmte Anwendungsfälle über leistungsstarke datenorientierte Technologie-Stack (DOTS) für Mehrkernprozessoren möglich.
Unity unterstützt C#, eine Standardsprache der Branche mit Ähnlichkeiten zu Java oder C++.
C# ist einfacher zu lernen als C++. Darüber hinaus ist es eine "verwaltete Sprache", die Ihnen die Speicherverwaltung abnimmt: Arbeitsspeicher wird automatisch zugewiesen und freigegeben, Speicherlecks abgefangen usw.
Insgesamt ist C# C++ vorzuziehen, wenn Sie zuerst ein Spiel erschaffen und sich anschließend mit den komplexeren Aspekten der Programmierung befassen möchten.
Das gesamte in Unity entwickelte Gameplay und alle interaktiven Aktivitäten basieren auf drei grundlegenden Bausteinen: Spielobjekte, Komponenten und Variablen.
Jedes Objekt in einem Spiel ist ein GameObject: Charaktere, Beleuchtung, Spezialeffekte, Requisiten – einfach alles.
Komponenten
GameObjects können selbst nichts tun. Um mit ihnen zu interagieren, benötigen GameObjects Eigenschaften, die Sie über Komponenten hinzufügen.
Komponenten verfügen über zahlreiche bearbeitbare Eigenschaften oder Variablen, die Sie im Inspektorfenster im Unity-Editorund/oder über Skripte anpassen können. Im obigen Beispiel umfassen die Eigenschaften des Lichts unter anderem Reichweite, Farbe und Intensität.
Unity stellt äußerst vielseitige integrierte Komponenten bereit. Doch schon bald werden Sie feststellen, dass Sie mehr brauchen, um Ihre eigene Logik zu implementieren. Hier kommen Skripte ins Spiel, mit denen Sie Ihre eigene Spielelogik und Verhaltensweisen implementieren können. Die Skripte werden dann als Komponenten an GameObjects gebunden. Jedes Skript stellt eine Verbindung zur internen Funktionsweise von Unity her, indem eine Klasse implementiert wird, die von der integrierten klasse MonoBehaviour abgeleitet wird.
Ihre geskripteten Komponenten lassen sich vielseitig einsetzen: als Auslöser für Spielereignisse, für Kollissionsabfragen, zur Anwendung der Spielphysik, zur Reaktion auf Benutzereingaben und vieles mehr. Unter Unity-Skripting-API finden Sie weitere Informationen.
Das traditionelle GameObject-Komponenten-Konzept funktioniert immer noch gut, da es für Programmierer wie Nicht-Programmierer gleichermaßen einfach verständlich ist und sich dafür einfach intuitive Benutzeroberflächen erstellen lassen. Sie fügen einem GameObject eine Starrkörper-Komponente hinzu, um ihm Falleigenschaften zu verleihen, oder eine Licht-Komponente, um es leuchten zu lassen usw.
Das Komponentensysteme wurde jedoch in einem objektorientierten Framework geschrieben und stellt somit bei der Verwaltung des Zwischenspeichers und Arbeitsspeichers bei der sich ständig weiterentwickelnden Hardware eine Herausforderung für Entwickler dar.
Komponenten und GameObjects sind stark C++-basierte Objekte. Alle GameObjects haben einen Namen. Ihre Komponenten sind C#-Wrapper, die auf C++-Komponenten aufgesetzt werden. Dies erleichtert die Arbeit mit ihnen, kann jedoch die Leistung beeinträchtigen, da sie potenziell unstrukturiert im Speicher abgelegt werden. Das C#-Objekt kann sich überall im Speicher befinden. Auch das C++-Objekt wird an einer beliebigen Stelle des Speichers abgelegt. Dinge werden im fortlaufenden Speicher nicht gruppiert. Jedes Mal, wenn etwas zur Verarbeitung in den Prozessor geladen wird, muss es von mehreren Speicherorten zusammengetragen werden. Dies kann ein langsamer und ineffizienter Prozess sein, der aufwändig optimiert werden muss.
- dem C#-Jobsystem zum effizienten Ausführen von Multithread-Code.
- dem Entity-Component-System (ECS) zum standardmäßigen Schreiben von leistungsstarkem Code.
- dem Burst Compiler zum Erstellen von hochoptimiertem nativem Code.
Das neue Komponentensystem in DOTS ist ECS. Was Sie in einem traditionellen objektorientierten Ansatz mit einem GameObject tun, tun Sie in diesem neuen System mit einer Entity. Komponenten bleiben unverändert. Der entscheidende Unterschied liegt im Datenlayout. Mehr dazu lesen Sie im Blogbeitrag „Zu DOTS: Entity-Component-System
ECS ist nicht nur aus Designgründen der bessere Ansatz zur Spieleprogrammierung. Mit ECS können Sie das C#-Jobsystem und den Burst Compiler von Unity auf moderner Hardware optimal nutzen.
Mit den Mehrkernsystemen von DOTS können Sie Spiele entwickeln, die auf unterschiedlicher Hardware laufen, und lebendigere Spielwelten mit mehr Elementen und komplexeren Simulationen erschaffen. Leistungsstarker Code trägt wiederum dazu bei, dass der Prozessor auf Mobilgeräten nicht zu heiß wird und nicht zu viel Strom verbraucht. Wenn Sie vom objektorientierten zum datenorientierten Design wechseln, kann es für Sie und andere, die mit Ihrem Code arbeiten, einfacher sein, Ihren Code weiter zu verwenden.
Da die Technologie von DOTS noch teilweise als Vorabversion verfügbar ist, sollten Entwickler ihn derzeit nur zur Lösung spezifischer Leistungsprobleme in ihren Projekten und nicht zum Entwickeln ganzer Projekte verwenden. Im Abschnitt "Weitere Ressourcen" unten auf dieser Seite finden Sie Links zu den wichtigsten DOTS-Ressourcen.
Optimierung und Fehlerbehebung sind in Unity so effizient, da Entwickler beim Spielen alle Gameplay-Variablen sehen und direkt ändern können, ohne auch nur eine einzelne Codezeile schreiben zu müssen. Das Spiel kann jederzeit angehalten oder der Code von Anweisung zu Anweisung schrittweise ausgeführt werden.
Mit diesen hervorragenden Ressourcen machen Sie sich mit der Optimierung in Unity vertraut:
.NET: .NET: Unity hat eine Implementierung der Standard-Mono-Laufzeitumgebung mit nativer C#-Unterstützung für Skripting verwendet. Derzeit wird Unity für Mac mit Visual Studio ausgeliefert statt mit MonoDevelop-Unity auf macOS. Unter Windows wird Unity mit Visual Studio ausgeliefert.
Die -NET 4.6-Skripting-Laufzeitumgebung in Unity unterstützt viele der neuen spannenden Funktionen von C# sowie die Fehlerbehebung ab C# 6.0. Außerdem wird eine hervorragende integrierte C#-Entwicklungsumgebung für die neuen C#-Funktionen bereitgestellt.
IL2CPP: IL2CPP: Dieses von Unity entwickelte Skripting-Backend stellt für Projekte auf einigen Plattformen eine Alternative zu Mono dar. Wenn Sie ein Projekt mit IL2CPP erstellen, konvertiert Unity den IL-Code aus Skripten und Assemblys in C++-Code und erstellt dann eine native Binärdatei (z. B. .exe, .apk, .xap) für die gewählte Plattform.
Beachten Sie, dass IL2CPP für Spiele auf iOS und WebGL das einzig verfügbare Skripting-Backend ist.