Jump to content
Unity Insider Forum

[Gelöst]Script ohne deklaration verwenden


Jomnitech

Recommended Posts

Ja, das geht, aber ich sage voraus, dass sich herausstellen wird, dass das nicht das gewesen sein wird, was du eigentlich wolltest.

Bei Objektorientierung gibt es Vererbung und/oder Implementation als Grundkonzepte, die eine "ist-ein"-Beziehung realer Zusammenhänge wiederspiegeln. "Ein A ist ein B" ist gleichbedeutend mit "Ein B hat alle Eigenschaften, die ein A hat, vielleicht noch mehr". Wenn du deshalb eine Klasse "FeuerwehrAuto" schreibst, kannst du diese von "Auto" erben lassen, denn ein Feuerwehrauto kann alles, was ein Auto kann.

class FeuerwehrAuto : Auto

Da du damit definiert hast, dass "FeuerwehrAuto ist-ein Auto", kannst du überall, wo es um Autos geht, auch ein FeuerwehrAuto benutzen.

Auto meinAuto = new FeuerwehrAuto();

Das geht, weil ein FeuerwehrAuto nunmal alles kann, was ein Auto kann.

meinAuto.GibGas();

Allerdings reden wir hier von einem Auto, und deshalb können wir nicht die Sirene anmachen.

meinAuto.SireneAn(); // Kompiliert nicht

Es könnte ja sein, dass weiter oben ein anderes Auto, das kein FeuerwehrAuto ist, in der Variable referenziert wurde.

Zurück zu Unity: Wenn du ein Script erstellst, dann erbt deine Scriptklasse von MonoBehaviour.

class MeinScript : MonoBehaviour

MonoBehaviour erbt von Behaviour, welches wiederum con Component erbt, und Component ist die Klasse, die die Funktionialität hat, dass man Objekte der Klasse als Komponenten auf GameObjects ziehen kann. Davon erben z.B. wiederum Renderer, Light und Collider.

Wenn du jetzt ein beliebiges Script referenzieren willst, kannst du eine Variable vom Typ MonoBehaviour anlegen.

MonoBehaviour mb = GetComponent<MeinScript>();
// oder eben
public MonoBehaviour mb;

Allerdings weiß der Compiler natürlich wieder nicht, ob du da ein MeinScript oder ein AnderesScript reinziehst. Deshalb kannst du keine MEthode aufrufem, die du in MeinScript definiert hast, und auch keine der Eigenschaften auslesen oder setzen.

Es gibt jetzt die Möglichkeit, dein MonoBehaviour-Objekt darauf zu testen, von welcher Klasse es nun genau stammt. Als ob du zum Auto gehst und fragst "bist du ein FeuerwehrAuto?" Das ist allerdings etwas, das man niemals machen sollte. Das ist so eines des Dinge, die ganz schlechten Code ausmachen.

Was du stattdessen machen kannst ist, die Gemeinsamkeiten zu nutzen, die in der Superklasse definiert sind. So ist in Behaviour die "enabled"-Eigenschaft definiert, mit der man Komponenten an und aus machen kann. Diese Eigenschaft haben alle Klassen, die von Behaviour erben, und deshalb kannst du sie benutzen, wie GibGas.

Jetzt ist natürlich die Frage: Was willst du denn eigentlich damit machen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...