Jump to content
Unity Insider Forum

Archived

This topic is now archived and is closed to further replies.

Coooder

Pfad finden

Recommended Posts

Hallo Leute,

 

wie man auf dem angehängten Bild sehen kann, besteht mein spielfeld aus Cubes. Die Hellblauben Cubes, sind die Cubes die in Reichweite für die Einheit(Capsule) sind.

 

Wie man sieht fehlt unter der Einheit ein Cube, quasie ein Hindernis. Wie kann ich in so einem Szenario den passenden Pfad berechnen den die Einheit laufen soll? Also mal angenommen er soll z.B. hinter den fehlenden Cube laufen. Er soll weder drüber laufen noch schräg laufen.

 

Da das Spielfeld aus einzelnen Cubes besteht und die später auch noch alle bewegbar sind, kann ich mit dem NavmeshAgent hier nicht arbeiten oder?

post-4766-0-37676700-1469009379_thumb.png

Share this post


Link to post
Share on other sites

Hi Coooder,

 

die einfachste und schnellste Möglichkeit ist das NavMesh von Unity zu nutzen. Für die Hindernisse gibt es NavMesh Obstacles. Das gesamte Spielfeld sollte dann zum NavMesh gehören. In deiner Logik kannst du dann natürlich in Hinblick auf die hellblauen Cubes Einschränkungen vornehmen. Wenn das Ziel per Mausklick gewählt wird, dann ist ein Klick nur auf hellblaue Cubes ein valides Ziel.

 

Alternativ müsstest du dich sonst mit A* oder anderen Algorithmen auseinander setzen oder ein Asset aus dem Store besorgen.

Share this post


Link to post
Share on other sites

Dann müssten alle cubes Obstacles sein. Kann der NavMeshAgent da drauf laufen?

Der Spieler kann die Position der Cubes später noch verändern um so neue Wege zu bauen.

Die Cubes werden auch per Code gesetzt, es gibt also auch nichts was ich für den NavMesh baken kann.

Share this post


Link to post
Share on other sites

Du kannst dir es so vorstellen, dass die Obstacles einen Teil vom NavMesh ausschneiden und das dynamisch zur Laufzeit.

 

Wenn Cubes kein Hinderniss mehr sind, dann wird einfach die Komponente des Obstacles deaktiviert.

Share this post


Link to post
Share on other sites

Das Ausschneiden ist als Metapher gemeint. Du legst dir ein NavMesh zu und gibt's jedem Hindernis eine Obstacle Komponente. Das heißt, dass dein NavMeshAgent um das Obstacle herum navigieren muss. Wenn das Hindernis als solches nicht mehr fungiert, dann kannst du ganz einfach die Obstacle Komponente deaktivieren. Was genau davon kannst du nicht nachvollziehen?

Share this post


Link to post
Share on other sites

Wenn dann Cubes angehoben werden ensteht dort an der stelle ein Loch. Die Einheit würde jetzt aber einfach über das Loch drüber laufen da der NavMesh ja so gebaked ist. Hinzu kommt, würde jetzt eine Einheit zusätzlich auf der Plattform sein, würde sie da nich drauf laufen können, weil da ja nich gebaked wurde. (-> siehe screenshot)

 

Oder irre ich mich da?

post-4766-0-99828500-1469018142_thumb.png

Share this post


Link to post
Share on other sites

Die Probleme kannst du mit NavMesh Obstacles lösen. Dann hast du möglicherweise da "unsichtbare" Cubes stehen, die das Obstacle dann bilden. Diese Fälle werden natürlich gesondert betrachtet, aber bedienen sich der selben Möglichkeiten. Ein neues NavMesh brauch dafür nicht gebacken werden.

Share this post


Link to post
Share on other sites

Was hindert dich daran, ein unsichtbares Objekt mit Obstacle an dem Punkt zu belassen?

 

Edit: Ne Hundertstel zu langsam.

Share this post


Link to post
Share on other sites

Ok das mit den unsichtbaren Obstacles versteh ich. Aber wie werden die Cubes die nach oben verschoben wurden begehbar gemacht? Theoretisch kann dann da auch ne Einheit drauf sein.

Share this post


Link to post
Share on other sites

×
×
  • Create New...