Jump to content
Unity Insider Forum

NavMeshAgent Rotation auf Child Objekt übertragen


MustafGames

Recommended Posts

Grüße,

mir geht gerade ein Problem auf die Nerven welches ich nicht gelöst bekomme, daher frag ich hier nach.

Ich habe einen NavMeshAgent und dieser hat ja die Möglichkeit agent.updateRotation auf false zu setzen. jetzt geht alles nur die Figur dreht sich nicht,  den das Model ist als Child Objekt des NavMeshAgent Objekts gegeben. Jetzt möchte ich das Child Objekt nur um die Y-Achse immer in die Richtung drehen wo mein Agent zuletzt hingesehen hat, nur wie? mit agent.velocity und LookAt rotiert es über alle 3 Achsen trotz das ich velocity.y auf 0 setze?

Komme einfach nicht weiter!

Mfg Mustaf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Forum, Hallo MustafGames,

das ist tatsächlich mal ein Thema, wo ich mich einbringen könnte. Zumal der Mann mit dem Hut heute anscheinend ausschlafen will.

Die Art der Fragestellung lässt darauf schließen, das es einige Erfahrungs-Lücken auf mehreren Gebieten gibt, die zur Lösung nötig sind. Meinen Kindern sage ich immer: Man muss wissen, wovon man keine Ahnung hat. Hier im Forum geht das natürlich nicht!

Wenn das Rotations-Problem nur ein Unter-Problem darstellt, dann schau, ob Du irgendwo einen passablen Codeschnipsel herbekommst. Du ersparst Dir meine grauen Haare.

Wenn Du Dich für das Thema interessierst  und Du zwei Wochenenden investieren willst, dann hier ein paar Tipps und Hinweise.

-Erstelle einen möglichst schlichtes 3d-Objekt. Nur die Kapsel ist schlecht, weil die kein sichtbares "Vorne" hat. Also mach irgendwie eine Nase daran...Oder Augen oder einen Pimmel, ist wurscht. Dann füge die Navmeshagent- KOMPONENTE hinzu. In der Fragestellung ist von Objekt die Rede, das verstehe ich nicht ganz. Dann ein kleines Navmesh mit möglichst vielen Hindernissen damit Dein Navmeshagent möglichst viele Kurven laufen muss. Dann noch ein Script das den Agent hin und her bewegt, ich empfehle sowas wie "MovetoClick". Dann schalte alle Gizmos an welche die Navigation betreffen, markiere im Inspektor das Objekt, welche die Navmeshkomponente hat. Mit dem kleinen Schloss-Symbol kannst Du verhindern, das der Inspektor den Fokus wechselt. Jetzt lässt Du Dein Objekt hin und her laufen. Mit der Taste "F" ... oder "F-F"? wird das Objekt verfolgt - sehr praktisch. Und jetzt: beobachte die kleinen Pfeile, die am Gizmo des Navmeshagent zu sehen sind. Wenn Du verstehst was Du siehst ist das schon einmal sehr gut!

-spiele mit "updatePosition", "updateRotation", den Werten für die Beschleunigung und der Stop-Strecke , also setzen und auslesen. Der Navmeshagent HAT eine eigene Rotation, aber die wird manchmal zurückgesetzt. Auch wenn Du meinst das nicht zu brauchen: Ich denke, nur so bekommt man raus, wie der Navmeshagent "Tickt". 

-Die Geschwindigkeit des Navmeshagent entspricht oft genug einem Null-Vektor: Blöd wenn mann immer wissen will, wo vorne ist.

-LookAt ... mag gehen, lass das erstmal weg. Ich vermute, Du hast die Methode noch nicht ganz durchschaut - oder ich habe sie nicht durchschaut, obwohl ich an anderen stellen oft damit arbeite.

-Dein Codeschnipsel ... fang von vorne an, ohne LookAt.

-Bewegungsrichtung und Guckrichtung sind zwei verschiedene Schuhe. Manchmal ist der Unterschied nur winzig klein, aber genau das macht den Erfolg aus.

-Sobald Du verstanden hast, wie der Navmeshagent "Tickt", verstehst Du auch die Dokumentation. Bei mir hat es andersrum nicht geklappt!?

-Wenigstens braucht man Durchblick bei der Vektorrechnung und dem Unterschied zwischen Position und Richtung. Besser auch noch bei den Quaternions

 

Also, Ich empfehle hier in diesem Fall die Codeschnipsel aus den Unity Tutorials - Eindeutig! Aber meine Empfehlungen zum Einarbeiten sind vielleicht für viele hilfreich.

 

Gruß von Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na so einfach wie du dir das bei mir vorstellst ist es nicht.

Mein Projekt ist ein 2D Projekt, da Unity den NavMesh aber nicht für 2D Projekte aktuell vergeben hat, habe ich einen NavMeshSurface2D Script aus dem Netz implementiert, meine Figur ist komplex und doch gut strukturiert, da es ein Isometrisches Spiel ist muss noch einiges beachtet werden.

Mein Hauptobjekt (mit NavMeshAgent und Movement Script) und Scale auf 1, 1, -0.1 damit es 2D wirkt.

hat als Child ein Objekt welches nur die Rotation auf 22.5, -45, -22.5 setzt

das hat wiederum dann als Child mein eigentliches Model, die Rotation muss hier gesetzt werden sonst sieht alles schlecht aus.

 

Problem ist jetzt das wenn ich meinen Agent updateRotation auf false setzte, geht alles er läuft und so, nur die Figur schaut immer in die selbe Richtung.

Lass ich update Rotation auf true, dreht er sich aber die Figur ist dann wie eine Scheibe und das sieht blöd aus.

Jetzt muss ich die Rotation die der Agent auf sein Objekt setzt auf mein Model übertragen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist natürlich gut möglich, das ich nicht alles verstanden habe.

Ich vermute mal, Dein Problem lässt sich in zwei Abschnitte unterteilen:

1. Welche Richtung ist "Vorne", nicht zu verwechseln mit: Wo ist "Vorne"?

2. Die Richtung "Vorne" mit den entsprechenden Einschränkungen auf Dein Object, nein, Modell übertragen.

Ich finde meine Hinweise weiterhin sehr nützlich, auch wenn Deine Fragestellung nur ein Teilgebiet des Navmeshagent betrift.

Kümmern wir uns erstmal um 1.

Ist bei Dir  "velocity" wirklich die Richtung, in die "Vorne" zeigen soll? Also, bevor Du die Einschränkungen vornimmst. "velocity" kann auch ein Nullvektor sein, hast Du das bedacht? Du ordnest Dein Modell dem Objekt unter, welches die Navmesh-Komponente besitzt? Wenn Du das nicht tust, sondern Dein Modell von Hand nachführst, bist Du flexibler und hast nicht Seiteneffekten zu tun deren Ursprung Du im Moment noch nicht kennst.

Gruß von Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wobei ich mir sicher bin, das es für die Navigation und das Führen von Modellen in Bezug auf Isometrischen Vorgaben pfiffige Ideen gibt. Wenn Du das selber entwickeln willst, dann finde ich das gut, ich kann aber nur in Bezug auf den Navmeshagent helfen - und noch mit dem Rat, nicht LookAt zu verwenden.

Gruß von Lutz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...