Hallo Zusammen,
ich bin gerade dabei, ein wenig an einem Top-Down-Shooter zu arbeiten. Um mir nicht unnötig Arbeit mit dem Pathfinding zu machen, nutze ich das Built-In-Feature von Unity. Meine Gegner haben sowohl einen Agent als auch die Obstacle-Komponente, wobei die Obstacle-Komponente zu Anfang deaktiviert ist und erst aktiviert wird, wenn der Spieler (oder ein anderes Ziel) in Reichweite ist (im Gegenzug wird der Agent auch deaktiviert). Siehe hier ein Ausschnitt aus dem Code (C#):
private NavMeshAgent agent;
private NavMeshObstacle navObstacle;
void Start () {
navObstacle = GetComponent<NavMeshObstacle> ();
agent = GetComponent<NavMeshAgent>();
}
void Update() {
float distance = Vector3.Distance(enemySonar.GetAktuellesTarget().transform.position, transform.position);
if (distance <= agent.stoppingDistance + 0.4f) {
// in attack range
navObstacle.enabled = true;
agent.enabled = false;
AttackTarget();
} else {
// nicht in range
navObstacle.enabled = false;
agent.enabled = true;
agent.SetDestination(enemySonar.GetAktuellesTarget().transform.position);
}
}
Soweit funktioniert das auch. Wenn der Gegner in Reichweite ist, deaktiviert sich der Agent und das Obstacle wird aktiv (der nächste Gegner der ankommt, geht auch brav aussen rum vorbei). Wenn sich der Spieler vom Gegner entfernt, das ganze umgedreht und die Gegner marschieren wieder los. Das einzige Problem dass ich jetzt habe ist, sobald noch ein dritter (vierter, fünfter, ...) Gegner dazu kommt und alle das selbe Ziel haben.
Wie auf den angehängten Bildern zu sehen ist, scheint der dritte Gegner auch die Obstacles zu erkennen und bewegt sich nicht weiter, bleibt also einfach stehen. Aber eigentlich sollte er nicht stehen bleiben, sondern einen Weg rundherum nehmen, und das tut er nicht -.-
Jemand eine Idee/Workaround wie ich das Problem umgehen kann?
(Zur Erklärung der Bilder: Im oberen Bild ist der Radius vom Obstacle normal, beim Unteren habe ich testweise den Radius etwas erhöht um zu sehen, ob der Gegner das Obstacle erkennt. In beiden Fällen bleibt der Gegner aber einfach stehen...)
Edit: Ich nutze nur die Unity Free, aber das wird damit ja nichts zu tun haben?!
Edit:
Bei meinen Objecten mit der Obstacle-Komponente verändert sich auch nicht das NavMesh, so wie z.Bsp. in dem Video bei 1:54 zu sehen ist, sie blockieren einfach nur den Weg. Hm?
Habe es auch noch mal mit einem komplett leeren GameObject mit Obstacle-Komponente dran versucht. Auch hier keine Veränderung am Mesh?!
Edit:
Ok, also ein Pro-Feature... Dann muss ich mir wohl Gedanken um ein Workaround machen -.-