Du bist nicht angemeldet.

Werbeanzeige

1

22.12.2012, 19:15

(Unity 3d) Position eines Objekts mit vorheriger Position vergleichen

Hallo

Der Titel klingt verwirrend (mal wieder), man braucht halt mehr Raum um die komplette Frage zu stellen.

Ich weiss wie man die momentane Position eines Objekts einer Variablen zuweist.

(KrasseVariable = transform.pos)

Nun Frage ich mich ob es möglich ist, der Variable als Wert die Position des Objekts vor 2 Sekunden zuzuweisen.

Also wenn ich ein fahrendes Auto habe, möchte ich wissen wo sich das Auto vor genau 2 Sekunden befand.


Mein eigentliches Ziel ist es ein Objekt zu erstellen, welches von der Position des Objekts, zu der Position vor 2 Sekunden gedreht ist.



Ich hoffe meine Angabe ist nicht zu schlecht erklärt ^^

LG Jussuv
Dieser Satz ist eine Lüge!

Toa

Alter Hase

Beiträge: 952

Beruf: Research associate

  • Private Nachricht senden

2

22.12.2012, 20:57

Klar geht das. Einfach die position speichern und nur alle 2 Sekunden aktualisieren. Hilfreich ist das sicherlich die Time Referenz [1]. Aber sag mal du erstellst auch viele Themen pro Tag, deren Antwort ein paar Minuten in der Unity Referenz nachschlagen braucht.

[1] http://docs.unity3d.com/Documentation/Sc…rence/Time.html
"Das ist ein Minkovski Raum, manche Menschen nennen ihn auch Weltraum" Prof. Dr. Jürgen Wambach, Theoretische Physik, TU Darmstadt | Meine Homepage

3

22.12.2012, 22:23

Ich hab mir die Befehle mal angeschaut, und empfinde die Beschreibungen nicht wirklich als einleuchtend. Da steht hinter einigen Sachen dass es die Zeit seit des letzten Frames sei, und dann steht da dass es die Zeit seit des Beginns des Spiels sei. Ich suche einen Befehl der alle 2 Sekunden eine Funktion ausführt.
Ist es vielleicht möglich "yield WaitForSeconds" dafür anzuwenden?
(Ich versuchs einfach mal)
Aber ich bin mir ziemlich sicher dass es doch einen weniger komplizierten Weg geben muss.
Dieser Satz ist eine Lüge!

Schorsch

Supermoderator

Beiträge: 5 182

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

4

23.12.2012, 04:07

Du brauchst erst mal "if" um etwas abzufragen. In deinem Fall, ob mindestens 2 Sekunden vergangen sind. Du speicherst einfach in jedem Update die Zeit die seit dem letzen Frame vergangen ist. Addierst diese Zeit immer auf. Wenn die Zeit nun mehr als zwei Sekunden beträgt, dann führst du die Funktion aus, welche du alle 2 Sekunden ausführen möchtest. Du setzt deine Zeit Variable auf 0 und fängst von vorne an. Wie du die Zeit abfragen kannst, wurde ja schon genannt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

David Scherfgen

Administrator

Beiträge: 10 199

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

23.12.2012, 10:06

Klar geht das. Einfach die position speichern und nur alle 2 Sekunden aktualisieren.

Das würde aber nicht den gewünschten Effekt erzielen.
Stell es dir doch mal vor ... alle zwei Sekunden würde die Kamera springen!

Die "richtige" Lösung: du brauchst eine Liste vorheriger Positionen, sozusagen eine History.
Da schreibst du jedes Frame die Position rein (am besten in FixedUpdate) und kannst später die Position eines Zeitpunkts in der Vergangenheit wieder rausholen.
Achte aber darauf, dass die Liste nicht unnötig lang wird. Wenn du nur 2 Sekunden brauchst, solltest du alle Einträge darüber hinaus löschen.

6

23.12.2012, 16:59

Zitat

du brauchst eine Liste vorheriger Positionen, sozusagen eine History.
Klingt plausibel, jetzt wüsst ich allerdings doch ganz gerne wie das funktioniert, ich hab nämlich nicht mal ansatzweise eine Ahnung wie das funktionieren könnte ;)

PS: Ja ich habe schon in der Reference gesucht und keine Antwort gefunden (Was auch daran liegen könnte dass ich nicht ganz weiss unter welchem Begriff sowas untergeordnet wäre)
Dieser Satz ist eine Lüge!

Schorsch

Supermoderator

Beiträge: 5 182

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

7

23.12.2012, 21:11

Dann solltest du dir mal ein Tutorial angucken.
http://cgcookie.com/unity/ Dort werden zum Beispiel einige Sachen zu Unity gezeigt. Wenn du C# verwendest, kannst du dir eigentlich auch ein allgemeines C# Tutorial angucken.
Wie du dann eine Liste erstellst und da jeden Frame etwas drin abspeicherst solltest du dann finden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

24.12.2012, 11:36

Auf der Seite funktioniert die Suchfunktion bei mir irgendwie nicht ganz, da kommt immer etwas was nichts mit dem Begriff zu tun hat. Also guck ich einfach mal was ich genau möchte, in jedem Update brauch ich die Aktuelle Position und die Position vor 2 Sekunden.
Also brauch ich genaugenommen nur einen Befehl welcher den Zustand des Autos vor 2 Sekunden ermittelt. Muss man dann wirklich so eine Liste machen?
Mein Versuch mit "yield WaitForSeconds" ist übrigens nicht aufgegangen.
Da passierte einfach nichts, ohne Fehlermeldung. Dieser würde den gewünschten Effekt aber eh nicht ganz erfüllen, weswegen es auch nicht wirklich sinnvoll ist ihn hier zu posten.

PS: Frohe Weihnachten ;)

LG Jussuv
Dieser Satz ist eine Lüge!

David Scherfgen

Administrator

Beiträge: 10 199

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

24.12.2012, 13:23

Klingt plausibel, jetzt wüsst ich allerdings doch ganz gerne wie das funktioniert, ich hab nämlich nicht mal ansatzweise eine Ahnung wie das funktionieren könnte ;)

PS: Ja ich habe schon in der Reference gesucht und keine Antwort gefunden (Was auch daran liegen könnte dass ich nicht ganz weiss unter welchem Begriff sowas untergeordnet wäre)

Sowas findet man auch nicht in der Unity-Referenz, da es nichts mit Unity zu tun hat.
Du brauchst einfach nur eine Liste mit Vector3-Items, wo du die Position anhängst.
Wenn dich das überfordert, dann musst du auf jeden Fall zuerst mal ein grundlegendes C#-Buch durcharbeiten - das bringt sonst alles nix.

Schorsch

Supermoderator

Beiträge: 5 182

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

10

24.12.2012, 13:24

Na wenn du dir jeden Frame die Position speicherst, dann kannst du doch einfach nachgucken an welcher Position du vor 2 Sekunden warst. Und zum speichern nimmst du halt die Liste.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige