Unity transform.position ist falsch?
Hallo,
meine Situation ist, ich habe ein Gebiet(GameObject), ein Monster(GameObject) und einen MovePoint(Vectore3). Mein MovePoint ist ein zufälliger Punkt im Gebiet. Und mein Monster geht auf diesen MovePoint zu. Nachdem das Monster den MovePoint erreicht hat, sollte eigentlich so dachte ich die transform.position exakt gleich sein.
So habe ich geschrieben:
if (Monster.transform.position == NextPosition)
Die If Funktion wird jedoch nicht ausgelöst oder nur sehr random ausgeläst was mich noch mehr verwirrt. Ich habe die Position der Variable MovePoint im Inspector mit der Position des Monsters verglichen und diese sind komplett unterschiedlich. Finden tut das Monster ja den MovePoint trotzdem um auf ihn zuzuzgehen. Woran liegt das und wie kann ich das beheben??
Bitte um Hilfe!!
1 Antwort
Hi,
die Position wird nicht falsch sein, sondern das ist ganz normal. :-)
Der Computer kann Fließkommazahlen/float nicht immer zu 100 % korrekt darstellen, sondern nur eine Annäherung. Bsp: wenn Du ein float möchtest, der 123,45 abbildet, kann es sein, dass der Computer 123,499999999999 draus macht, da es technisch nicht anders geht.
Wenn Du jetzt anfängst mit Addieren/Subtrahieren (was ja die Verschiebung Deiner Position ist), ergeben sich minimale Rundungsfehler. Und diese sind der Grund, warum Deine If-Abfrage so nicht klappen kann.
Die Lösung hierfür ist, dass Du bspw. Vector3.Distance nutzt. Dieser berechnet die Distanz zweier Vektoren und wenn dieser sehr klein ist, hast Du die Position erreicht:
if (Vector3.Distance(Monster.transform.position, NextPosition) <= 0.01) {
// Position wurde erreicht mit einer Genaugigkeit von 0.01
}
Ob Du nun 0.01 als Genauigkeit oder was kleiner verwendest, dass musst Du einfach für Dein Spiel ausprobieren :)