Wie kann ich in C# / Unity die Position eines Gameobjekts auslesen?
Wie kann ich in C# / Unity die Position eines Gameobjekts auslesen wenn das Skript nicht auf dem Gameobjekt liegt??
4 Antworten
Gibt verschiedene Methoden. Generell beziehst du immer noch das GameObject. Entweder, wie regex9 sagt, indem du es direkt zuweist oder z.B. auch über
GameObject.Find("Name");
LG
Du hast zunächst diese Möglichkeiten
1. Objekt Anhängen bzw Initialisieren
schreib in dein Script über der Start Methode folgenden Codeblock
public Transform name;
(bei "name" kannst du selbstverständlich deine eigenen Variablenamen wählen)
Wenn du das Script jetzt speicherst wird dir in deinem Inspector bei dem Script ein neues leeres Feld angezeigt. Dort ziehst du dann das Objekt in Frage rein.
Tada. Nun kannst du die Position mit
name.position;
abfragen.
2. Objekt mit Tag versehen.
Diese Methode ist gut wenn du mehrere Objekte finden willst.
Erstmal musst du deinem Objekt ein Tag zuweisen. Das kannst du auch Oben im Inspector machen. Wenn dein(e) Objekt(e) seinen Tag hast, kannst du so ihre Position abfragen
2.1 Nur ein Objekt
Vector3 objectPos = GameObject.FindObjectWithTag("DeinTag").transform.position;
2.2 Mehrere Objekte
GameObject[] objects = GameObject.FindObjectsWithTag("DeinTag");
List<Vector3> objectsPos = new List<Vector3>();
foreach(GameObject object in objects)
{
objectsPos.Add(object.transform.position);
}
(Das mit den meheren Objekten geht auch einfacher guck dir gerne mal LINQ an)
3. Ganz Simpel du suchst das Objekt einfach mit seinem Namen.
Vector3 objPos = GameObject.Find("NameDesObjektes).transform.position;
Jedoch sind Methode 2 und 3 nicht sehr Perfomant. Du solltest also darauf achten, dass sie nicht in jeder Update Methode stehen am besten in der Start Methode oder noch besser in der Awake Methode.
Falls Fragen offen sind sag gerne bescheid
LG
Dnold
Trotzdem noch immer über das Game Object. Dein Skript braucht aber eine Referenz darauf.
Du könntest dir ein Feld anlegen, auf welches du dein Game Object im Inspektor ziehst.
public GameObject yourGameObject;
Lies dazu auch hier.
In dem Script:
public Transform positionVomAnderen;
//beispiel zum auslesen:
public float positionXVomAnderen;
void Update()
{
positionXVomAnderen = positionVomAnderen.position.x;
}
Jetzt musst du nur noch in Unity bei dem Script bei "Transform" das GameObject mit Drag-and-Drop reihziehen. Mein Video dazu:
https://www.youtube.com/watch?v=KosbljVRb88
Viele Grüße!
Wie kann ich dann die Position abrufen?