Jump to content
Unity Insider Forum

Y Aktualisieren


Kojote

Recommended Posts

Grüße!

Um einen Charakter zu einer bestimmten Position zu bekommen, nutze ich folgenden Befehl um erst einmal das Ziel zu bekommen:

zielTransformPosition = new Vector3((transform.position.x + 1), transform.position.y, transform.position.z);

Danach macht sich der Charakter auf den Weg:

transform.position = Vector3.MoveTowards(transform.position, zielTransformPosition, charakterGeschwindigkeit);

Wenn er am Ziel ist, soll er etwas machen, deswegen Abfrage:

if (transform.position == zielTransformPosition) {
}

Bis hier hin ja eigentlich recht Nett, jedoch hatte ich heute das Problem, dass der Charakter ab und an einmal eine kleine Steigung überwinden muss, da ich aber bei "zielTransformPosition" ja den Y-Wert festlege, bleibt er irgendwann an der Steigung logischerweise hängen.

Nun habe ich das so gelöst:

zielTransformPosition.y = transform.position.y;
transform.position = Vector3.MoveTowards(transform.position, zielTransformPosition, charakterGeschwindigkeit);

Ich aktualisiere dauerhaft den Y-Wert. Funktionieren tut der Spaß auch, sowohl Steigung hoch, als auch Steigung herunter.

Frage nach dem Text wäre nun:

1. Könnte dies Probleme verursachen, durch die dauerhafte aktualisierung, denke da so an "Profiler".

2. Könnte man das auch eleganzer lösen oder ist die Lösung recht passabel?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 43 Minuten schrieb Kojote:

1. Könnte dies Probleme verursachen, durch die dauerhafte aktualisierung, denke da so an "Profiler".

orly.jpg

So ein üblicher PC-Prozessor leistet heutzutage so mindestens 50 GigaFLOPS (Quelle).

Das sind 50.000.000.000 Floating Point Operations pro Sekunde. Wenn dein Spiel bei 60 FPS läuft, hast 60 Mal pro Sekunde einen Floatwert, der durch die Gegend kopiert wird. Das sind 0,00000012% deiner Prozessorleistung. Auch Smartphones leisten heutzutage bei mindestens 5 GFLOPS auf der CPU. Dann wären das immer noch nur 0,0000012% der Prozessorleistung. Also bitte, bitte, hört mal allesamt auf euch wegen einzelner mathematischer Operationen Sorgen zu machen! :D

vor 43 Minuten schrieb Kojote:

2. Könnte man das auch eleganzer lösen oder ist die Lösung recht passabel?

Wenn ich ganz ehrlich sein soll, verstehe ich gerade nicht einmal, wieso das überhaupt funktioniert.

Du bewegst die Figur mit MoveTowards horizontal, da zielTransformPosition denselben y-Wert hat wie transform.position. Dann setzt du zielTransformPosition.y auf transform.position.y... welches sich nicht geändert haben dürfte, weil du ja, wie eben erwähnt, horizontal bewegst. Wo kommt also die vertikale Bewegung her?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt wo du es sagst, na eben... <_< Wie gesagt er geht eine leichte Steigung nach oben. Ich bewege ihn ja nicht über Physic, dachte die Masse macht das. Komisch?!

Er berechnet ja nur ein mal das Ziel:

zielTransformPosition = new Vector3(transform.position.x, transform.position.y, (transform.position.z + 1));

Danach per Update Methode nur noch das:

zielTransformPosition.y = transform.position.y;
transform.position = Vector3.MoveTowards(transform.position, zielTransformPosition, charakterGeschwindigkeit);
if (transform.position == zielTransformPosition) {
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also entweder bin ich genialer als ich dachte oder du hast mich falsch verstanden, vermute aber mal zweiteres.^^"

Nein, ich nutze keine Physik. Der Rigidbody ist zwar drin, mit Gravity und Masse, jedoch ist die FixedUpdate nicht aktiv.

Mal in 2D Ansicht sieht es ganz normal aus, der Charakter läuft und trifft auf den schrägen Collider und folgt diesem einfach nach oben. Abwärts das selbe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Minuten schrieb Kojote:

Nein, ich nutze keine Physik. Der Rigidbody ist zwar drin, mit Gravity und Masse, jedoch ist die FixedUpdate nicht aktiv.

Na aber hallo ist er das! Solange du nicht Is Kinematic angehakt hast, macht der sogar ne ganze Menge. Dazu braucht man auch nichts zu coden.

//e: Kannst ja mal den Rigidbody löschen und gucken wie gut das mit der Steigung noch funktioniert ;)

vor 15 Minuten schrieb Kojote:

Mal in 2D Ansicht sieht es ganz normal aus, der Charakter läuft und trifft auf den schrägen Collider und folgt diesem einfach nach oben. Abwärts das selbe.

Liegt daran, dass sowohl das In-den-Boden-reingehen, als auch das Wieder-rausschieben zwischen zwei Mal Bild erneuern passiert. Mitkriegen tut man davon also nichts. Das ist dasselbe wie

transform.Rotate(0, 45, 0);
transform.Rotate(0, 45, 0);

Da ist das Ding auch nur von einem Bild zum anderen um 90° gedreht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb Sascha:

Na aber hallo ist er das! Solange du nicht Is Kinematic angehakt hast, macht der sogar ne ganze Menge. Dazu braucht man auch nichts zu coden.

 

Arbeite mit Unity erst seit einigen Wochen, so gut kenne ich mich noch nicht aus.^^

Was also im Hintergrund passiert, kann ich nicht genau sagen. Also ohne das ich es beabsichtigte, hab ich wohl das richtige gemacht.^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb Kojote:

Arbeite mit Unity erst seit einigen Wochen, so gut kenne ich mich noch nicht aus.^^

Dafür sind wir ja hier!

vor 1 Minute schrieb Kojote:

Was also im Hintergrund passiert, kann ich nicht genau sagen.

Dafür auch!

vor 1 Minute schrieb Kojote:

Also ohne das ich es beabsichtigte, hab ich wohl das richtige gemacht.^^

Ist aber gut, dass du nachgefragt hast.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...