Frage von Crysali, 11

Unity - Objektreferenz bei allgemeinem Script herstellen?

Ich habe mir einige Tutorials zu Unity angeschaut und würde nun gerne mir selbst ein allgemeingültiges Skript für die Bewegung von Objekten schreiben.

Meine Frage diesbezüglich wäre, ich kann ja, wenn ich möchte, dass ein Objekt dieses Skript benutzt, dann kann ich das Skript ja an das Objekt dranhängen. Wie bekomme ich aber nun heraus, welches Objekt ( welcher Objekttype) gerade bewegt wird, im Laufe des Skriptes ? Wenn ich nun die Bewegung für ganz bestimmte Objekte modifizieren möchte oder Werte aus Variablen mit Array laden möchte, wie stelle ich die Referenz zu dem Typ des Objektes her ?

Beispiel: Objekt A, Objekt B und Objekt C nutzen alle das Skript "Movement". Für jeden Objekttyp sollen nun eigene Geschwindigkeitswerte aus einer Variable mit Array geladen werden.

Wie stelle ich im Skript die Referenz zu dem Typ des Ojektes her und wie speichere ich Werte spezifisch unter einem Objekt ab und lade diese in meinem Skript ?

Antwort
von dosenbiiir, 4

Wenn du dein Script auf deses Objekt ziehst (als Component hinzufügst) wird
das Script auf jedem dieser Objekte ausgeführt. Wenn du nun für
verschiedene Objekttypen andere modifizierte Bewegungen haben möchtest,
kannst du doch einfach die Variablen der jeweiligen Objekte ändern.
Wenn du z.B. nur eine unterschiedliche Geschwindigkeit für verschiedenen
Objekt Typen haben möchtest, erstellst du dir einfach eine Variable die
du public machst. also "public float geschwindigkeit". Die Variable
erscheint dann im Inspector (Unity Fenster) und du kannst für jedes
Objekt einen anderen Wert eintragen. So musst du nix aus einem Array
lesen.
Möchtest du für verschiedenen Typen auch einen eigenen Code
schreiben, kannst du entweder ein extra Script verwenden für diese
Objekte, oder auch einfach mit einer If-Abfrage arbeiten. z.B. könntest
du dir eine public Integer-Variable definieren die den Typ des Objektes
angibt. Wenn die Variable den Wert 0 hat, ist dein Objekt Typ A, bei dem
Wert 1 Objekt Typ B usw. (wenn du später mehr Erfahrung hast würdest du
vermutlich eher ein Enum verwenden, brauchst du aber absolut nicht als
Anfänger ;))  In einer If-Abfrage fragst du dann ab um welchen Integer
Wert es sich handelt also so etwas:

if (objektTyp == 0)
{
//Code für Objekt A
}
else if (objektTyp == 1)
{
//Code für Objekt B
}

Falls dir das nicht reichen sollte (ich denke das reicht in deinem Fall, aber wenn nicht), kannst du oben im Inspector dem Objekt einen Tag geben. Dazu musst du zunächst einmal einen neuen Tag erstellen und ihn dann dem Objekt zuweisen. Dann kannst du im Code den Tag abfragen (z.B. "Player");

if (gameObject.tag == "Player") 
{
//Ich bin ein Player Objekt
}

Viel Erfolg ;)

Liebe Grüße Dosenbiiir

Kommentar von Crysali ,

Vielen Dank, ich habe mich schon gewundert, ob ITE die beste / eine gute Lösung ist, um zwischen verschiedenen Objekten zu unterscheiden.

Wenn ich also ein Objekt in einem Skript, nicht im Unity Interface, definieren möchte, dann muss ich also die Tags verwenden, danke, großartiger Vorschlag!

Kommentar von dosenbiiir ,

Hab gerne geholfen :)

Warum möchtest du das Objekt denn nicht im Unity Interface definieren?

So gesehen definierst du den Tag ja auch im Interface von Unity^^

Und natürlich gibts auch andere Möglichkeiten ... eben mit Variablen arbeiten. Falls du die Objekte z.B. während des Spiels erst spawnen lässt, kannst du ja direkt den Typ in einer Variable speichern.

Keine passende Antwort gefunden?

Fragen Sie die Community