Wie kann ich diesen Code-Fehler in Unity / Visual Studio reparieren?

2 Antworten

Die Methode FindGameObjectsWithTag tut exakt das, was ihr Name verspricht: Sie sucht Objekte mit einem entsprechenden Tag. Der Rückgabetyp ist, so wie die Fehlermeldung mit ausgibt, ein Array an GameObject-Objekten.

Du musst ein spezielles Objekt aus dem Array wählen, zu dem du die Position ermitteln möchtest. Prüfe aber zuvor, wie viele Elemente überhaut gefunden wurden. Das Array könnte auch leer sein / nicht so viele Elemente enthalten, wie erwartet.

In diesem Beispiel wird das erste Objekt genommen, welches von der Methode gefunden werden konnte:

var players = GameObject.FindGameObjectsWithTag("Player");

if (players.Length > 0)
{
  target = players[0].transform.position;
}

Im weiteren Verlauf solltest du mit einberechnen, dass target auch unbelegt sein könnte, falls kein Objekt mit dem entsprechenden Tag gefunden werden konnte.

Eine andere Lösung, die du wählen könntest, wäre es, dem Skript stattdessen ein weiteres Feld (player) zu geben, in dem ein GameObject gespeichert wird. Das Player-Objekt (ich gehe hierbei davon aus, dass es nur eines gibt) kannst du im Unity Editor auf das Feld ziehen (lies dazu auch hier).

regex9  10.05.2019, 01:31

PS.: Alternative zu obiger Methode: FindWithTag. Das Ergebnis sollte vor Verwendung auf null geprüft werden.

0

Ändere in der Start-Funktion den Teil A zu B um und der Fehler hat sich gelöst:
A) target = GameObject.FindGameObjectsWithTag("Player").transform.position;
B) target = GameObject.FindGameObjectWithTag ("Player").transform.position;

PS: Ich gehe mal auf Grund von 'Vector3 target;' davon aus,
es handelt sich hierbei nur um die Position von einem Objekt.