Also: Top-Down-Spiel, meine Feinde jagen den Spieler, wenn sie sich in einer bestimmten Entfernung befinden, stehen sie still und schießen. Wenn sie alle aus der gleichen Richtung kommen, stehen sie alle an der gleichen Stelle (dh "ineinander"), da ich gerade keine Kollisionserkennung zwischen Feinden durchführe - sie können frei übereinander fahren.
Was ist ein einfacher Weg, um dies zu umgehen? Entweder irgendeine Form der Kollisionserkennung oder irgendein ai?
ai
collision-detection
Iain
quelle
quelle
Antworten:
Sie brauchen keine Kollisionserkennung, aber Sie müssen Ihren Feinden ein bisschen Intelligenz geben und sie müssen es vermeiden, sich gegenseitig anzugreifen. Ohne Kollisionserkennung sehen Ihre Feinde sowieso nur dumm aus - die Leute meiden sich gegenseitig, sie kollidieren im Allgemeinen nicht.
Suchen Sie nach "Beflockung" für einige einfache Verhaltensweisen.
Die Grundidee ist, dass die Dinge auf den Spieler zugehen sollten, aber nicht in der Nähe eines Hindernisses (einander, Wände, so etwas).
quelle
Sie könnten sich von Herdenverhalten wie Boids inspirieren lassen .
Diese bestehen in der Regel aus 3-4 sehr einfachen Regeln, die bei richtiger Anwendung zu sehr zufriedenstellenden und "komplex aussehenden" Verhaltensweisen führen.
In Ihrem Fall könnten Sie Folgendes versuchen:
quelle
Was Sie im Allgemeinen fragen, ist die dynamische Vermeidung zwischen den Akteuren. Sie könnten sich Geschwindigkeitshindernisse ansehen: http://gamma.cs.unc.edu/RVO/
quelle
Vielleicht möchten Sie die kollaborative Diffusion (großartige Animationen hier) oder eine andere Art von Anti-Objekt- Muster für die Bewegung ausprobieren . Während der Diffusionsalgorithmus an und für sich Feinde nicht davon abhält, sich zu überschreiten, können Sie zusätzliche Einschränkungen hinzufügen, um es unwahrscheinlich oder unmöglich zu machen.
quelle
Was ist, wenn Sie nicht durch andere Einheiten ziehen dürfen? Mir scheint, Sie werden es früher oder später brauchen. Wenn der aktuelle Pfad von einer Einheit blockiert wird, passen Sie den Pfad an, um ihn zu umgehen.
quelle
Auf der Website von Craig Reynold finden Sie Hinweise zu Steuerungs- und Flockverhalten . Sie sind relativ einfach zu implementieren, können aber ein schönes aufstrebendes Verhalten hervorrufen.
quelle
Alle anderen Antworten liefern ein besseres Ergebnis, aber die billigste (?) Möglichkeit, eine vollständige Gruppierung zu vermeiden, besteht darin, einen Zufallsvektor hinzuzufügen, der möglicherweise 25% des ursprünglich berechneten Bewegungsvektors entspricht, sodass Objekte in einer allgemeinen Blob-Gruppe ein wenig herumspringen . Es wird die Dinge nicht vollständig voneinander fernhalten, aber je nachdem, was Sie erreichen wollen, kann dies meiner Meinung nach angemessen sein. Objekte können mit dieser Methode immer noch gruppiert werden, wenn Sie Kreise um sie herum ziehen. Mit der Zeit tendieren sie jedoch dazu, sich zu zerstreuen.
Hier ist ein kleines Spiel, das ich vor einigen Jahren gemacht habe und das diese Methode demonstriert: http://deleter.phatcode.net/index.php?page=projects&p=4
quelle
Die Leute sprechen immer Boids an, da dies zu sehr guten Ergebnissen führt. Die Implementierung von Boids kann jedoch für Ihren speziellen Zweck zu viel Aufwand bedeuten. In der Vergangenheit habe ich sehr gute Ergebnisse erzielt, indem ich einfach die Zielposition innerhalb eines kleinen Kreises zufällig angeordnet habe.
Für eine Demo, die ich in Unity erstellt habe, habe ich beispielsweise den Befehl Random.insideUnitSphere zum Beflocken von Puffballs verwendet
quelle
Ich war mit dem gleichen Problem konfrontiert, als ich NevMeshAgent als Feind benutzte
Der Radius von NavMeshAgent
Danke an gameDevAnswer
quelle