Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Skripting in Unity Grundkurs

Eigene Funktionen entwerfen

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Eigene Funktionen zu schreiben, ist ein wichtiger Aspekt der objektorientierten Programmierung (OOP). Hier lernen Sie die nötigen Grundlagen.
15:06

Transkript

Mit dieser ganzen Thematik des Skriptings haben wir ein relativ mächtiges Tool an der Hand. Wir können fast alles umsetzen, was wir uns vorstellen können, was in einem Spiel funktionieren könnte. Und um diese Umsetzung noch komfortabler zu gestalten, können wir auch eigene Funtionen festlegen. Wir sehen hier ein Standard-Skript, gerade frisch erstellt, mit dem Namen OwnFunctions, denn hier in diesem Video soll es ja um eigene Funktionen gehen. Und wir sehen hier auch schon zwei festgesetzte Funktionen, nämlich einmal die Funktion Start und die Funktion Update. Diese sind jetzt korrespondierend mit den von Unity festgesetzten Zeitpunkten innerhalb eines Frame-Lifecycles, oder sagen wir lieber, innerhalb einer gesamten Applikation, denn Start ist ja nicht unbedingt innerhalb dieses Zyklusses, Update dagegen schon. Nichtdestotrotz sind das zwei Funktionen, die von Unity schon direkt vorgegeben sind, und auch schon in diesem Skript enthalten sind. Bevor wir uns jetzt genauer um Funktionen kümmern, schauen wir erstmal, wie wir das denn schreiben würden. wenn wir eine eigene Funktion schreiben. Und dabei gehen wir immer folgendermaßen vor, das ist jetzt wie so ein kleines Rezept, das ist vorgeschrieben, so müssen wir Funktionen immer schreiben. Zunächst schreiben wir hin, was für einen Rückgabetyp, beziehungsweise Rückgabewert unsere Funktion hat. Hier, wir sehen es hier oben, können wir zum Beispiel void hinschreiben. Void sagt unserem Compiler, also dem System, das unseren Programmcode interpretiert, Lieber Compiler, ab hier kommt jetzt eine Funktion, die überhaupt nichts zurückgibt. Zum Beispiel könnten wir diese Funktion Counter nennen. Um die Funktion ein wenig genauer zu erklären, werde ich hier oben jetzt noch mal kurz public.int zum Beispiel A hinschreiben, und die mit einer Eins belegen. Jetzt haben wir hier oben eine Variable mit dem Namen 1 festgelegt, vom Typ Integer, also ganze Zahl. So - unsere Funktion Counter, hier bitte dabei beachten, dass C groß geschrieben ist, beziehungsweise, dass das C groß ist, dass unsere Funktion groß geschrieben ist, das gehört einfach zu den Konventionen, gefolgt von einer runden Klammer auf, runden Klammer zu, und dann geschweifte Klammer auf, geschweifte Klammer zu. Wir sehen, dass das Visual Studio uns hier hilft, sobald wir eine Klammer auf setzen, wird eine Klammer zu gesetzt, und so weiter, ist ganz komfortabel. Aber so sähe eine eigene Funktion aus. Natürlich genau wie hier oben, nur der Name unterscheidet sich. Void sagt wie gesagt, unsere Funktion gibt überhaupt nichts zurück, sie ist lediglich ausführend. und das bedeutet zum Beispiel, dass sie nur folgendes tut, a + 1 - fertig ! Jetzt ist das natürlich erstmal eine Rechenanweisung, wir haben damit noch nichts gemacht, es wird rot unterstrichelt, wir sagen also, a gleich a + 1, da haben wir dann auch einen sinnvollen Befehl verwendet, wir weisen das direkt zu, mit a + 1 kann der Programmcode sonst nichts anfangen. Jetzt ist auch klar, dass diese Counterfunktion nichts zurückgibt, sie tut lediglich was, denn sie rechnet auf unsere Variable A eins drauf. Es kann aber auch sein, dass wir hier zum Beispiel sagen, B gleich A + 1, und dann dieses B natürlich als neue Variable deklarieren müssen, und die auch zurückgeben möchten. Das muss man sich in etwa so vorstellen, irgendwo ist eine Funktion, wir treten an diese Funktion heran, sagen "Liebe Funktion, hier ich geb dir mal was mit", rechne das mal aus, und sag mir am Ende, was du dabei herausbekommen hast. Das kann ich weiterverwenden, und damit weitere Berechnungen anstellen". Dafür müssten wir jetzt folgendes tun: Dieses Void wäre dann nicht mehr richtig, wir müssten den Rückgabetyp ändern, von "Im Moment gebe ich gar nichts zurück" in "Jo, ich geb eine Zahl zurück". und zwar vom Typ Integer. Denn wir haben ja hier gesagt, wir wollen B zurückgeben, und B ist auch vom Tpy Integer. Jetzt wird hier mit uns gemeckert und gesagt, Moment, Counter, das soll ja was zurückgeben, da steht nicht Void. Aber hier gibst du doch nichts zurück. Hierfür benötigen wir das Schlüsselwort Return. Denn Return sagt jetzt an, okay, ab hier möchte ich was zurückgeben. Jetzt müssen wir natürlich spezifizieren, was sollen wir denn überhaupt zurückgeben. und das wäre in diesem Fall B, und das wäre eine valide Funktion, das wäre erlaubt. Jetzt steht hier: "Lieber Compiler, ab hier, Achtung, kommt jetzt eine Funktion". die gibt auch was zurück, nämlich eine ganze Zahl, einen Integer, dann stelle ich irgendwelche Berechnungen an, hier kann alles mögliche drinstehen, und am Ende, gib mir das bitte zurück. Ich werde das Ganze hier jetzt nochmal bei Void lassen. dann darf Return natürlich hier nicht stehen, weil jetzt wird mit uns gemeckert und gesagt, Moment, ich kann doch überhaupt nichts zurückgeben, ich bin doch eine Void-Funktion. Deshalb kommentiere ich das aus, und mache jetzt mal extra etwas Falsches, denn ich gehe davon aus, ich habe doch jetzt eine Funktion geschrieben. und hier steht doch drin, B soll A + 1 sein. Dann mache ich hier nochmal ein A draus, mache das Int weg, und was hier noch drinsteht, ist "Liebe Funktion, nimm dir A und sag, A ist jetzt A + 1. Also addiere da drauf, dann müsste A danach doch 2 sein. Alles klar, soweit so gut, wir gehen zurück in Unity. Hier haben wir unsere Funktion, die ziehe ich jetzt noch auf ein leeres Game Objekt, damit dieses Skript auch ausgeführt wird, hier haben wir A, sobald ich jetzt starte, müsste doch eigentlich etwas passieren. Hm. Tut es aber nicht. Denn das reicht noch nicht. Gehen wir nochmal zurück in Visual Studio. Wir haben jetzt zwar unsere eigene Funktion geschrieben, die ist auch völlig in Ordnung, aber wir rufen Sie nirgendwo auf. Das ist in etwa so, als würden wir uns einen Einkaufszettel schreiben, und den beim Einkaufen nicht mitnehmen, da hilft er uns dann auch nicht. Wir müssen diese Funktion also aufrufen. Und das geht relativ einfach, indem wir einfach den Namen hinschreiben, da, wo wir sie nunmal aufrufen wollen, dann runde Klammer auf, runde Klammer zu, Visual Studio hilft uns da wieder, und dann einfach ein Semikolon. An dieser Stelle sagen wir dem Programmcode: Moment, wenn du hier bist, denn Start wird ja automatisch aufgerufen, bei der Initialisierung, und dann wird geschaut, Oh, hier muss ich ja die Funktion Counter aufrufen. und dann wird all das erledigt, was hier steht, und das ist das sogenannte Objektorientierte Programmieren (OOP), denn, wenn wir ehrlich sind, diese eine Zeile Code, die könnten wir ja auch hier oben reinschreiben. Das wäre ja nichts anderes, das Ergebnis wäre absolut das Gleiche. Aber stellen Sie sich folgendes vor, die Funktion Counter hätte für sich schon zweihundert Zeilen Code, und würde komplexe Berechnungen anstellen. Und wenn wir diese zweihundert Zeilen hier in Start reinschreiben, und damit eigentlich nur ein Ergebnis erwarten, beziehungsweise eine Funktion, die umgesetzt wird, dann kommt da bestimmt noch was hinzu. Und so wird unsere eigentliche Startfunktion sehr sehr voll und unübersichtlich. Wenn wir allerdings die zweihundert Zeilen Code hier im Counter festhalten, Dann sagen wir irgendwann, die Funktion gefällt mir, ich verstecke die vielleicht sogar, und rufe die hier oben einfach nur auf. Dann schreibe ich hier oben vielleicht noch einen Kommentar hin, "Counter zählt hoch", und dann weiß ich genau, ja, meine komplexe Berechnung mit zweihundert Zeilen Code wird hier ausgeführt, ich repräsentiere sie allerdings nur durch eine einzige Zeile. Und jetzt können wir zurück in Unity switchen, und sehen hier, wenn ich dann die Szene starte, jawohl, A wurde um eins erhöht. Nochmal zurück in Visual Studio, kucken wir uns jetzt an, was es bedeutet, wenn eine Funktion etwas zurückgeben soll. Also wenn wir hier nochmal eine Int, eine Integer-Funktion draus machen, hier int b hinschreiben, denn wir machen eine neue Variable b, und b soll dann bitte zurückgegeben werden. Jetzt werden wir folgendes tun: Natürlich können wir den Counter, beziehungsweise die Counter-Funktion hier immer noch weiter aufrufen, sie würde auch weiterhin etwas tun, allerdings würde das nicht mehr Auswirkungen auf a haben. Das können wir ja gerade mal testen, wechseln wir einmal zurück zu Unity, und starten die Szene, ja, die Funktion wird aufgerufen, da können wir uns sicher sein, nur mit a passiert halt nichts. a wird hier zurück in Visual Studio lediglich für eine Berechnung benutzt, die auch passiert, aber den Rückgabewert fragen wir niemals ab. Was wir aber tun könnten, ist uns das Ergebnis in die Konsole ausgeben, zum Beispiel mit Debug.Log, und jetzt haben wir innerhalb unseres Debug.Log's, das ja Sachen in die Konsole reinschreibt, eine Funktion drin. Natürlich wird jetzt nicht irgendwie Counter als normale Buchstabenkette ausgegeben, was nämlich ausgegeben wird, ist das hier: beziehungsweise eher das hier, all das, was hinter dem Schlüsselwort Return steht. Hier speichern wir nochmal und gehen zurück in Unity, starten jetzt die Szene, und sehen in der Konsole, hier wird die Berechnung ausgeführt, und es wird die Zwei ausgegeben. Es wird also b ausgegeben. Wir wissen nun also, wie wir Funktionen anlegen können, und was es mit dem Void, beziehungsweise Int, oder das könnte auch Float sein, auf sich hat, Hier haben wir also den Rückgabetypen. Was soll uns die Funktion wieder zurückgeben, wenn wir sie aufrufen, was kommt dabei rum, was sagt sie uns am Ende. Funktionen können jetzt noch etwas machen, sie können mit Dingen arbeiten, die wir ihnen mitgeben. Wir können hier in diese runden Klammern nämlich noch was reinschreiben, die stehen da nicht aus Spaß, hier können wir zum Beispiel Int x, int y, float z und so weiter und so weiter reinschreiben. Wir sehen, wir trennen diese Mitgabewerte durch ein Komma, diese Parameter der Funktion sagt man auch, und müssen sie fast schon so deklarieren, wie wir das hier oben tun würden. Hier sehen wir, wenn wir das public mal wegmachen, int a und genauso tun wir das auch hier innerhalb der Klammern, wir deklarieren hier Variablen, mit denen wir nun hier arbeiten können. und wenn ich das jetzt mal hier wegnehme, und ich lasse es mal bei Integer-Werten, könnten wir hier x plus y sagen, und er würde diese Variablen kennen, obwohl wir hier nirgendwo irgendwie x und y deklariert haben, nur hier in unserer Funktion. Was außerdem wichtig ist, diese Variablen hier oben, sind nur zugänglich innerhalb dieser Funktion, nirgendswo anders dürfen wir sie verwenden, nirgendswo anders können wir sie verwenden, weil sie da einfach nicht bekannt sind. Dann wird uns gesagt, ja, Moment mal, wo nimmst du die dir denn her, jetzt wird hier oben nochmal mit uns gemeckert, es wird rot unterstrichelt, und gesagt, "Ich finde keine Funktion Counter, die null Argumente annimmt". denn hier versuchen wir die Funktion mit null Argumenten aufzurufen, es gibt aber nur eine Funktion Counter mit zwei Argumenten, nämlich x und y. Diese müssen wir hier natürlich übergeben, denn sonst weiß Counter nicht, was x und y sind. Um die Funktion korrekt aufzurufen, müssen wir nun also Werte mitgeben, zum Beispiel 2 und 3. Würde ich hier einen weiteren Parameter, ein weiteres Argument hinzufügen, zum Beispiel Float z, dann würde hier wieder mit uns gemeckert werden, denn wir versuchen, Counter mit zwei Argumenten beziehungsweise zwei Parametern aufzurufen, es gibt aber nur Counter mit drei, also müssten wir hier um eins erweitern, denn es fehlte der Float-Wert, den wir jetzt ergänzt haben. Wie gesagt, wir wollen es aber bei zwei Integern belassen, und könnten so mit dieser Funktion arbeiten. Zurück in Unity - Rufen wir jetzt nochmal diese Funktion auf, indem wir das Spiel starten, und es kommt 5 heraus. Und so, wenn wir uns das nochmal in Visual Studio anschauen, haben wir nun die Macht, sag ich jetzt einfach mal, kennengelernt, eigene Funktionen zu schreiben, diese auch noch mit Parametern zu füttern, und sie sogar etwas zurückgeben zu lassen. Hierbei ist wichtig, dass wir auf den Rückgabetyp achten, Void, Int, Float, String, Bool wäre natürlich auch möglich, alle Variablen-Typen, die so gängig sind, dann müssen wir auf den Namen achten, den bitte groß schreiben, das gehört zu den Konventionen, und in die Klammern kommen dann die Parameter. Diese müssen natürlich auch beachtet werden, wenn wir die Funktion aufrufen. Ansonsten wird mit uns gemeckert, und es wird gesagt, "Moment, die Funktion ohne Parameter, oder mit so wenig oder mit so vielen, die kenne ich überhaupt nicht. Wenn wir diese Funktion dann aufrufen, gibt sie uns etwas zurück, wenn sie denn nicht vom Typ Void ist, und ansonsten ist sie einfach nur eine ausführende Funktion, die allerlei Aktionen durchführen kann. Am besten ist, sie experimentieren mit eigenen Funktionen, erstellen vielleicht eigene Counter, die Werte hochzählen, oder schauen einfach mal, was alles hinter dieser Macht der eigenen Funktionen steht, und wo sie aufgerufen werden können. Vielleicht auch in Update, oder noch anderen Funktionen, die wiederum andere Funktionen aufrufen. Schauen Sie einfach mal, was damit möglich ist, und ich wünsche Ihnen dabei viel Spaß.

Skripting in Unity Grundkurs

Greifen Sie mithilfe von C#-Skripts dynamisch in Ihr Unity-Projekt ein. Auch Programmier-Neulinge lernen Schritt für Schritt den Einstieg ins Skripting.

4 Std. 50 min (40 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Anleitung für Unity 5-Nutzer:

  • Schritt 1: Projekt in Unity 5 öffnen und die Meldung bestätigen, dass das Projekt ein Upgrade bekommt.
  • Schritt 2: Wenn die Meldung kommt, dass die API upgedatet werden muss, diese auch bestätigen

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!