Jump to content
Unity Insider Forum

Überlappende Boxcollider


Darkkingdom

Recommended Posts

Hallo Zusammen :)

 

alsooo wie ich in einem etwas älteren Thread geschrieben habe benutze ich für mein 2D Game "NavMesh2d" als Pathfindingsystem. Mittlerweile funktioniert das ganze auch gut.

Blöderweiße stehe ich nun vor dem nächsten Problem :(

 

Und zwar überlappen sich meine 2D Box Collider, vielleicht hilft das Bild hier um es deutlicher zu machen:

 

 

6nq8szun.png

 

 

Der Baum stellt für mein Pathfinding das Hindernis dar und der Dämon ist wie zu erwarten der Enemy. Sobald der Enemy zu nahm am Baum vorbei läuft überlappen sich die Box Collider zu stark und er steckt fest :(

 

Ich vermute das Hauptproblem liegt am NavMesh Scirpt bloß bei den untiefen deren Libarys blick ich absolut nicht mehr durch xD

 

Nun ist meine Frage ob ich das ganze auch so lösen kann, gibt es eine Methode um prinzipiell zu verhindern das sich Boxcollider überlappen?

 

 

Ich freue mich schon auf eure Antworten :)

 

Danke euch!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, ich kenne NavMesh2D jetzt nicht, aber folgende Sachen könnten weiterhelfen:

 

Musst du BoxCollider für deine Agenten (d.h. Einheiten die Pathfinding nutzen) benutzen?

-> Wenn nicht, tausch mal den BoxCollider gegen etwas Abgerundetes (Sphere/Capsule bzw. Circle2D Collider) aus.

-> Wenn ja, hilft es vielleicht (zumindest wenn du 2D Collider benutzt) Compound Collider 2D zu benutzen, d.h. mehrere BoxCollider auf einer Einheit, mit der du die Silhouette "nachmalen" kannst.

 

Eventuell könnte ein Physics-Material den Einheiten zu einem "gleitenden" Verhalten verhelfen.

 

Wahrscheinlich ist, dass die Toleranz bei der PfadSuche irgendwo in dem Tool (NavMesh2D) eingestellt werden kann. Und zwar nicht im Code, sondern bei der NavMeshErstellung.

 

Wenn dir das alles nicht weiterhilft, poste bitte den Bewegungscode deiner Einheiten, vielleicht kann man da was machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey HeadWorker,

 

also erstmal danke für den super Post! :)

 

Es ist mit NavMesh2d auch möglich andere Formen zu verwenden.

Blöderweise bringen die auch keinen Unterschied :(

 

bxzxnhws.png

 

Auch ein Material hilft nicht weiter.

 

Nachdem du das mit der Toleranz erwähnt hast hab ich mich ein bisschen im NavMesh umgeschaut und siehe da es gibt wirklich eine Option für das "Padding" (also Abstand zum Objekt)

Nunja mittlerweile denke ich das ich sogar 2 Probleme habe, bzw das dass Feststecken gar nichts mit den Collidern zu tun hat :(

 

bgjy5nsq.png

 

So wie der Enemy auf dem Screenshot steht müsste er mich eigentlich weiter verfolgen aber er steckt fest, obwohl sich die Collider ja gar nicht überschneiden :(

 

Ich poste euch mal mein Pathfinding was am Enemy GO angehängt ist.

Vielleicht seht Ihr ja etwas mit dem man meine beiden Probleme, das überschneiden der Collider und das Feststecken beheben kann :)

 

void Update () {

 if (reachedTarget == false &&
  Vector2.Distance (transform.position, pathingTarget.position) < 8.0f) {
  path = NavMesh2D.GetSmoothedPath (transform.position, pathingTarget.position);

} else {
  if(path != null && path.Count != 0){
  path.Clear ();
  }
 }

 if (path != null && path.Count != 0) {
  if (Vector2.Distance (transform.position, path [0]) < 0.01f) {
	path.RemoveAt (0);
  }
  if (path != null && path.Count != 0 && reachedTarget == false)
  {
 transform.position = Vector2.MoveTowards (transform.position, path [0], 2f * Time.deltaTime);
 }
  }
 }

 

Auf offener Fläche funktioniert das so auch Super nur eben nicht bei Hindernissen :(

 

 

Würde mich sehr über Hilfe freuen :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin, da muss ich später noch genauer schauen, bzw heute nachmittag, aber eine Sache könntest du noch versuchen:

 

Gute Idee, immer wenn man mit Pathfinding/AI zu tun hat: Debug Lines.

 

Anfangen kannst du mit

 

if (path[0] != null) { Debug.DrawLine(transform.position, path[0], Color.Red,0.1f) }

 

Pack das mal in die Update Funktion vom Gegner. Dann kannst du schon mal sehen wo der eigentlich hinwill.

 

Wenn da alles stimmt, müssen wir weiterschauen.

Eine Frage noch: Warum wird der aktuelle Path gelöscht, wenn der Feind weiter als 8 Units vom Spieler entfernt ist? Ist das deine Aggrorange?

 

Edit: Im Playmode nicht vergessen "Gizmos" zu aktivieren, damit du die Debug Line sehen kannst!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin ich hab deine PN bekommen.

 

Deaktivier als nächstes mal bitte den Collider auf dem Gegner, und wenn dies nicht möglich ist mach den mal ganz klein, schauen wir mal was passiert.

 

Problem hier, ich kann die Schritte nicht so gut nachvollziehen, da ich das Tool nicht habe, müssen wir jetzt ein bisschen im Nebel stochern :)

 

EDIT:

Wenn du NavMesh2D von PigeonCoop hast:

 

- Mach mal das Navmesh nochmal neu, aktivier "Bake Grid" mit Vector2 (0.5, 0.5).

 

 

- Ist der Setup am Anfang mit den Layers korrekt? Also getrennte Wall / Floor Layers und die Objekte auch richtig zugewiesen?

- Kannst du ein Screenshot von deinem Navmesh nach dem Baken posten?

- Hast du nach dem Baken mit dem Tester rumgespielt, um dein Navmesh zu testen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey HeadWorker,

 

also den BoxCollider am Enemy bauch ich für andere Scripts, aber auch wenn der deaktivert ist steckt der Enemy trotzdem fest :(

 

Genau das NavMesh2D von PigeonCoop^^

 

0,5,0,5 bringt leider auch keine veränderung :(

Hier wäre ein Screenshot des NavMesh und nochmal die selbe aufnahme ohne das Mesh dafür mit Pathtester^^

 

5nbyf8aj.png

 

ph5h8wry.png

 

 

 

Und sag mal hast du dir echt extra für mich ein NavMesh2d Turorial gegönnt?^^

Bist echt der größte^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab den Thread nur so Rande beobachtet... ich habe das Gefühl, hier fehlt ein grundlegende Kleinigkeit zu NavMeshes. Du generierst die Dinger ja mit einem Border-Wert. Dieser Wert stellt den Abstand zwischen den Punkten um den Collider des Baumes und dem Collider selbst da. Diesen Wert gibt es nicht ohne Grund: NavMeshes sind nicht dafür vorgesehen, dass Agenten unterschiedlicher Größe darüber laufen. Stattdessen wird das NavMesh direkt für Agenten mit Radius <Border> berechnet.

Die Agenten laufen dann mit ihrem Mittelpunkt immer bis zum Rand des NavMeshes und berühren nie die Collider, da das NavMesh ja genau so weit vom Collider weg ist wie der Radius des Agenten.

 

Ich hoffe nur, die ganze Erklärung war nicht für den Allerwertesten, weil dein Asset jetzt mit dem Standard bricht oder so :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aufbauend auf Saschas Kommentar könntest du mal versuchen entweder das Padding massiv zu erhöhen, oder den feurigen Freund auf Spielergröße zu verkleinern, bzw. auch mal kleiner zu Test.

 

Und das Navmesh Tutorial hat sich auch für mich gelohnt, ich bin im Moment mit Simply Astar 2D Mode nicht so zufrieden, selber programmieren mach auch keinen Spass mehr (rekursive Funktionen kotzen mich an :) ) also vielleicht kauf ich das mal später.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey Sacha & HeadWorker^^

 

ich muss zugeben das mit der Größe des Agenten und dem Radius um das Objekt hab ich bisher nicht ganz bedacht.

(Wieder was gelernt :) )

 

Blöderweise scheint es auch das nicht zu sein :(

Auch ein riesiger Border und winziger Enemy hilft nichts. Er steckt trotzdem an den Kanten festen.

 

wdpnut98.png

 

Hier auch mal ein Screenshot meiner NavMesh Einstellungen wenns weiterhilft^^

 

amenwcnp.png

 

Übrigens gibt es ja die Option "JoinType" die auf den Screenshots auf Square eingestellt ist, auch die Option Round bringt nichts er verhängt sich trotzdem an den abgerundeten Ecken :(

 

@HeadWork: Verstehe ich^^ Eigentlich kann ich bis auf das bekannte Problem NavMesh2d nur empfehlen.

Die Interfaces sind super! Und 15 Euro sind echt nicht die Welt^^

 

 

Hoffe Ihr gebt mich und mein Problem nicht auf :)

 

 

-------------------------------------------------------------------------------------------

 

EDIT:

Hab gerade noch etwas rumprobiert und herrausgefunden das, dass Feststecken mit der Join Option "miter" (also Vierecke) am seltesten vorkommt. Das komische ist bloß das er hier, wenn er feststeckt, das er nicht an der Ecke feststeckt, sondern an genau der selben Stelle wo vorher mit der Square funktion die Ecke war o.O

 

Siehe:

 

6vluh3qe.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...