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.

Verfügen Sie bereits über C++-Kenntnisse?

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.

GameObjects und Komponenten in Unity

Das gesamte in Unity entwickelte Gameplay und die Interaktivität basieren auf drei fundamentalen Bausteinen: GameObjects, 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 definieren und steuern das Verhalten der GameObjects, an die sie angefügt sind. Ein einfaches Beispiel ist die Erschaffung eines Lichts. Hierfür mit einem GameObject eine Licht-Komponente hinzugefügt (siehe unten). Oder Sie fügen einem Objekt eine Starrkörper-Komponente hinzu, um ihm Falleigenschaften zu verleihen. 

Komponenten verfügen über zahlreiche bearbeitbare Eigenschaften oder Variablen, die Sie im Inspektorfenster im Unity-Editor und/oder über Skripte anpassen können. Im obigen Beispiel umfassen die Eigenschaften des Lichts unter anderem Reichweite, Farbe und Intensität.

Skripting-Komponenten in Unity

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.

Unity Megacity-Demo in DOTS

Vorteile des datenorientierten Designs mit DOTS

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.

Um diese Leistungsprobleme in den Griff zu bekommen, bauen wir Unity von Grund auf mit dem leistungsstarken datenorientierten Technologie-Stack für Mehrkernprozessoren (DOTS) (derzeit als Vorabversion) neu auf. 

DOTS ermöglicht es Ihrem Spiel, die neuesten Mehrkernprozessoren effizient auszunutzen. Er besteht aus: 

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. Weitere Informationen finden Sie im Blog-Eintrag On DOTS: Entity Component System".

Unity Megacity-Demo in DOTS

Moderne Hardware optimal nutzen

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.

Der Unity Profiler für optimierte Performance

Fehlerbehebung in Unity

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: 

Der Profiler 

Die Profiler-Analyse

Der Memory-Profiler 

Optimierung in Unity verstehen

Die Grafikleistung optimieren

Allgemeine bewährte Verfahren (einschließlich umfassender Tipps zur Optimierung des Benutzeroberflächensystems von Unity)

Skripting-Backends in Unity

.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: 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.

Unity durch Erweitern des Editors anpassen

Unity bietet Programmierern hervorragende Flexibilität. Passen Sie den Editor mit eigenen Fenstern an, die sich genauso wie der Inspector, das Szenenfenster oder jedes andere integrierte Fenster des Standard-Editors verhalten. Binden Sie Ihre eigenen Tools in Unity ein, um die Workflows und Bedürfnisse Ihres Teams zu unterstützen und effizienter zu arbeiten.

Wir verwenden Cookies, damit wir Ihnen die beste Erfahrung auf unserer Website bieten können. In unseren Cookie-Richtlinien erhalten Sie weitere Informationen.

Verstanden