Elemente de/aktivieren mit Enabled, SetActive

Script über enabled de/aktivieren

  • Das Script spricht sich selbst über this an und kann sich z.B. über this.enabled=true/false; de/aktivieren.

Ganzes Objekt mit gameObject.SetActive de/aktivieren

Jedes MonoBehaviour hat Zugriff auf das Szenenobjekt, über Felder wie folgende:

  • transform: Position, Skalierung und Rotation des Szenenobjekts, vgl. Transform-Abschnitt im Inspector. Außerdem Ordnung in der Hierarchie, etwa über transform.parent. (Synonym zu gameObject.transform)
  • gameObject: Zugriff auf weitere Eigenschaften wie Layer und Tags des Objekts. Um ein Objekt in der Szene zu halten, aber ein/aus zu schalten: gameObject.SetActive(true/false);.

Einige Unterschiede C#/C++

Es gibt eine Menge von Gemeinsamkeiten, aber auch Unterschieden tief im technischen Detail. Hier ein paar Aspekte aus Autorensicht:

  • C# stellt eine objektorientierte Sprache dar, die eher an Java als C erinnert. C#-Dateien (für Unity) sind praktisch ausnahmslos objektorientiert, jeder Code-Teil muss in Klassen organisiert werden.

  • Viele Dinge lassen sich aus Autorensicht einfacher bewerkstelligen, weil die Schreibweise weitestgehend intuitiv ist und es viele Vorimplementierungen gibt (z.B. Listentypen).

  • Befehle arbeiten nahezu ausschließlich einheitlich mit Punktnotation der Form objekt.befehlOderEigenschaft. Kryptische Konzepte wie cout << ...  in C++ gibt es in C# nicht (siehe auch Beispiel unten).

  • Die Objektorientierung und Vorimplementierungen erleichtern das intuitive Schreiben von Code. Während es in C++ z.B. viele Wege gibt, um Strings zusammenzusetzen, die noch dazu vom Zeichenkettenmodell abhängen, können in C# Strings einfach per Plusoperator (s = s + "mehr";) oder Funktionen, die leicht per Punktsyntax zu finden sind (s.Insert(0, "mehr");) verarbeitet werden. Dazu sind keine zusätzlichen includes o.ä. nötig.

  • Es gibt keine Header-Dateien, es genügen die eigentlichen C#-Dateien.

  • Es gibt eine Garbage Collection, d.h. Sie müssen mit new erzeugte Objekte nicht selbst freigeben. Der Speicher wird automatisch geleert, sobald das Objekt nicht mehr genutzt wird.

  • C# wurde als plattformunabhängig konzipiert. Der gleiche Code läuft (theoretisch) auf unterschiedlichen Plattformen. In Unity zeigt sich das daran, dass der gleiche Code in verschiedene Ziele übersetzt wird, z.B. für Android, iOS, Windows, MacOS, WebGL, ...

Vergleich zweier Hello Worlds (nicht Unity-bezogen):

C++
#include <iostream>
using namespace std;
int main()
{
  cout<<"Hallo Welt\n";
}

C#
using System; 
class Hello { 
  static void Main()
  { 
    System.Console.WriteLine("Hello World"); 
  } 
}

Die hier gezeigten Lektionen sind eine Auswahl von Inhalten aus mehreren verschiedenen kostenpflichtigen Kursen. Um alle Inhalte zu sehen, müssen mehrere Kurse gekauft werden. Änderungen und Aktualisierungen der Kursinhalte werden auf dieser Seite möglicherweise nicht oder nicht sofort dargestellt. Die kostenpflichtigen Udemy-Kurse enthalten neben den Videos auch Übungen, Textartikel, weitere Materialien, sowie ein Support-Forum für Fragen. Vereinzelt kann eine Lektion im mehreren Kursen gleichzeitig enthalten sein. Wenn etwas unklar ist, stelle Deine Frage per E-Mail an rene@gamedev-profi.de .