Sascha Geschrieben 6. September 2010 Melden Share Geschrieben 6. September 2010 Lies Dir bitte Scripten in Unity für Einsteiger und Scripten in Unity für Nicht-mehr-Einsteiger durch, bevor Du dich an dieses Tutorial setzt. Sonst könnte es hier Probleme geben. Noch mehr Scripten in Unity - Teil 3: Statische Variablen und Funktionen Dies ist ein ganz kurzes Tutorial, das eigentlich schon gar keins mehr ist. Ich erläutere kurz, was eine statische Variable/Funktion ist. Eine statische Variable/Funktion wird mit dem Keyword "static" deklariert: static var variable; static var zahl : int; static var wort : String = "Hallo"; static function Foo() { } Der Unterschiede zwischen normalen und statischen Variablen ist der, dass eine Statische Variable nicht instanzabhängig ist. D.h.: Wenn man ein Skript hat, den man zwei Objekten zuweist, und in dem Skript den Wert der Variablen ändert, dann gilt der veränderte Wert für BEIDE Instanzen des Skripts, genauer für ALLE Instanzen. Wozu soll das gut sein? Bei Variablen wahrscheinlich zu gar nichts. Denn wenn man z.B. zwei Türen hat und eine statische Variable im Türskript, die sagt, ob die Tür offen ist, ist doof, denn dann können nur beide Türen auf oder beide Türen zu sein. Bei Funktionen auch eher erstmal nicht. Schauen wir uns daher an, was für einen netten Nebeneffekt statische Variablen haben: Man kann sie direkt über das Skript ansprechen. Hä? Wenn ich ein Skript schreibe, der Dingens heißt und so aussieht: static var kirchen : String = "nix"; ..dann kann ich folgendes in einem ANDEREN Skript tun: Dingens.kirchen = "was"; Und tatsächlich wird "kirchen" geändert. Eine statische Variable ist eine Variable des Scripts selbst, und nicht einer Skriptinstanz (also einer zugewiesenen Skriptkomponente). Dennoch kann man von innerhalb des Skripts darauf zugreifen: static var kirchen : String = "nix"; function Start() { kirchen = "was"; } Beachte dabei, dass Start() nicht statisch ist, und nur aufgerufen wird, wenn es auch eine Skriptinstanz gibt! Genau so geht es mit Funktionen: static function MachWas() { /... } ...wird aufgerufen durch: Dingens.MachWas(); Beachte hierbei, dass in einer Statischen Funktion nicht ohne weiteres auf ein GameObject zugegriffen werden kann: static function MachWas() { transform.Translate(0,0,10); //FEHLER!!!! } ...denn eine statische Funktion wird ja im Skript selbst ausgeführt. Stellt euch vor, ihr habt 50 GameObjects mit je einem MachWas-Skript drauf - woher soll Unity da wissen, von welchem GameObject das gemeinte Transform sein soll? Versucht man so etwas, gibt es einen Fehler. Bei statischen Deklarationen ist zu beachten, dass sie für alle Skriptinstanzen gleich gelten. Das bedeutet, dass ein Wert für ein Objekt, das es mehrere Male geben kann, niemals statisch sein darf, erinnere Dich an die Türen. Eine Eigenschaft statischer Variablen ist noch zu nennen: Ihre Werte bleiben auch erhalten, wenn ein neue Scene geladen wird, da sie ja im Skript selbst verändert werden, und nicht in einer der Skriptinstanzen, die beim Laden einer neuen Scene verloren gehen. Wozu man statisches nun gebrauchen kann? Da gibt es einiges. Man kann z.B. einen Skript namens "Global" definieren, in dem die momentanen Einstellungen, die das ganze Spiel betreffen, stehen, sofern man das nicht über PlayerPrefs machen möchte. Ich zum Beispiel habe mir ein Overlay namens ColdAccess programmiert, die überall im Spiel durch das Drücken auf "Escape" zu erreichen ist, in dem man alles mögliche einstellen kann, wie Lautstärke oder Qualität. Ob das Overlay aktiv ist, welches Fenster davon gerade aufgerufen ist und alle andere Variablen und Funktionen des ColdAccess-Skripts sind statisch, sodass sie überall im Spiel gleich funktionieren. Außerdem kann ich jederzeit auf diese Variablen und Funktionen zugreifen, mit ColdAccess.Active() kann ich z.B. abfragen, ob das Overlay aktiv ist. Ansonsten müsste ich jedes Mal mit GameObject.Find() oder degleichen arbeiten, und das wäre ja nicht so schön. Wozu ihr statische Variablen/Funktionen nun nutzt, bleibt gänzlich euch überlassen, denn dass man sie wirklich braucht kommt in Unity gar nicht so oft vor, wie man vielleicht denkt. Ich hoffe aber, dass ihr jetzt wisst, wozu statische Variablen nicht benutzt werden sollen, und dass ihr den Fehler meidet, es trotzdem zu tun. 6 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Graphiler Geschrieben 14. August 2011 Melden Share Geschrieben 14. August 2011 Erstmal : Deine Tutorials sind super ! Aber,ich fände es gut wenn du mal ein Tutorial schreibst, in der "richtig" die API von Unity behandelt wird. Zum Beispiel wie man einen Character zum laufen, oder auch nur wie man 3D-Objekte bewegt. Ich weiß wie viel Arbeit so ein Tutorial macht aber, ich würde mich freuen wenn du deine Reihe etwas in die von mir beschriebene Richtung fortsetzen würdest. Gruß , Yannic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. August 2011 Autor Melden Share Geschrieben 14. August 2011 Ich habe in der Tat schon anderthalb Stunden Videomaterial mit genau so etwas aufgezeichnet, aber das muss alles nochmal überarbeitet werden - ich habe inzwischen auch wieder etwas mehr Zeit, also schauen wir mal! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Graphiler Geschrieben 15. August 2011 Melden Share Geschrieben 15. August 2011 Es wäre super wenn du noch etwas zu Skripten veröffentlichen würdest.Aber Texttutorials sind bei diesem Them doch eigentlich sinnvoller,oder??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. August 2011 Autor Melden Share Geschrieben 15. August 2011 Ich habe inzwischen festgestellt, dass mir bei einem so ergiebigen Thema wie dem CharacterController die Finger wehtun, wenn ich ein Texttutorial dazu schreiben will. Naja, ich schau halt mal. Ist alles möglich. //e: So, ich hab's getan. http://bit.ly/oYfWFf 2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.