2017-12-21 4 views
0

Ich habe ein NavMesh auf dem Boden (mit einigen Hügeln und Dinge) und meine "Soldaten stehen" (ich replizieren ein Wargame Tischplatte) haben NavMeshAgent. Alles funktioniert gut und glatt, aber das Problem ist, dass, wenn Agent bergauf geht, es vertikal bleibt, was ich für eine Person für okay halte, aber zum Beispiel für einen Tank keinen Sinn macht. Die Hälfte des Dankes schwebt in der Luft und die andere Hälfte dem Hügel ist innerhalbNavAgent Tangente an das Gelände

Dies ist ein Beispiel:

enter image description here

gibt es eine Möglichkeit, um sicherzustellen, dass die Gameobject Tangente an die NavMesh ist? Die vertikale Achse sollte der Norm des NavMesh im Mittelpunkt des Agenten oder etwas folgen. Um ehrlich zu sein, denke ich, dass ich nicht der erste bin, der es bemerkt, aber ich konnte keine Lösung finden

+0

Ich beginne zu denken, dass navmesh.sampleposition einfach nicht die normalen Daten in der NavMeshHit-Struktur hinzufügen, oder vielleicht kann es nicht auf der Datendefinition für die NavMeshes basieren. Das Hinzufügen der normalen Daten scheint auch etwas gegen die Deklaration der Funktion zu sein. –

Antwort

0

Das scheint eine Art zu sein, es zu tun, aber du kannst von deinem Roboter auf den Navmesh strahlen, und dann kannst du die Normale des Rayhits verwenden, um deinen Panzer/Roboter zu drehen.

Raycasting NavMesh: https://answers.unity.com/questions/325929/raycasting-on-navmesh.html

dies Dann nutzen Sie Ihren Roboter zu drehen, basierend auf der normalen Richtung der Trefferfläche:

tranform.rotation = Quaternion.FromToRotation(Vector3.up, rayhit.normal); 

Dies ist eine Ordnung Basis mit zu beginnen; Zusätzlich können Sie weitere Raycasts hinzufügen, um eine additive/genaue Rotation zu erhalten. Wenn Sie zum Beispiel 4 Reifen an Ihrem Roboter hätten, würde jeder Strahl von diesen Punkten aus abgefeuert werden.

+0

woher würden Sie raycast senden? Von der Mitte des Roboters zu .. wo? etwas wie der nächste Punkt des Geländes? und übrigens .. wie willst du raycast nur gegen den navmesh haben es nicht gefunden in der link ... :( – javirs

+0

als ich nicht wusste woher zu raycast Ich habe versucht NavMesh.SamplePosition stattdessen. Ich habe einen Punkt der Kontakt zwischen dem Roboter und dem Netz, aber da der Abstand ist Null (sie berühren) der Treffer. Normal ist (0,0,0) .. jede andere Lösung? – javirs

+0

Ja, tut mir leid, ich gebe zu, ich sprang die Waffe Ich habe mehr Tests mit den Normalen gemacht und ich kann es auch nicht funktionieren sehen. Ich kann alle Eigenschaften außer dem normalen bekommen. Aber ich kann mir keinen substanziellen Fall vorstellen, in dem du es würdest Raycast auf dem Navmesh anstelle des eigentlichen Colliders auf dem Mesh. Vielleicht könntest du einfach einen normalen Physics.raycast ausprobieren –

Verwandte Themen