Jump to content
Unity Insider Forum

Geschosse zu schnell für Kollisionserkennung


gombolo

Recommended Posts

Hallo zusammen, 

in meinem Spiel kann man seine Waffe aufrüsten und kann im der maximalen Aufbaustufe sind so ca. 80 Geschosse mit hoher Geschwindigkeit unterwegs. Jetzt habe ich festgestellt, das gelegentlich (eigentlich zu viele) Geschosse durch die Gegner fliegen. Vor allem wenn man maximale Feuerkraft hat. 

MEIN LÖSUNG

Ich habe folgendes gemacht. Ich merke mir die letzte Position und errechne den Abstand zur aktuellen Position (pro Frame (FixedUpdate()). Diesen Abstand benutze ich um über einen Strahl zu schauen ob es mit einem Objekt kollidiert. 

Es ist jetzt viel besser, aber trotzdem rutschen vereinzelt Geschosse durch...Ich würde gerne eine "perfekte Lösung" haben bei dir nichts durchrutscht. 

  • Was könnte man anders machen? Ist vielleicht die Strahllänge zu kurz?
  • Soll ich anders vorgehen? 
  • Gibt es bessere Techniken?

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 11.3.2022 um 01:08 schrieb Kojote:

Effekthascherei...

Das will ich doch haben ;) Es ist ein Spiel und es gibt viele Effekte in diesem Spiel. Explosionen, Blitze, Schockwellen und vieles mehr...

Ich benutze doch einen Strahl. Ich war mir nur nicht sicher ob es klug ist den Abstand von der alten Position zur neuen Position als Länge für den Strahl herzunehmen. Also ich prüfe nicht auf einen unbestimmte Länge sondern nur bis zu einem bestimmten Bereich. Jedoch ist das ein Blick in die Vergangenheit. Besser wäre es eine Vorhersage zu treffen wo der Strahl im nächsten Frame sein wird. Doch ich habe keine Ahnung wie das gehen soll und ob das mehr Sinn macht.

Aber alles egal jetzt. Ich habe ein paar Änderungen am Code gemacht und es funktioniert wunderbar. Gelegentlich, aber wirklich Eins von tausenden Schüssen geht vielleicht durch, aber damit kann ich leben. 

Hier ein paar Screenshots weshalb ich die Geschosse darstellen will...

 

  • Bild 1....Ein Schuss ist schon ziemlich weit gekommen, aber auch der wird im nächsten Frame erfolgreich als Kollision erkannt
  • Bild 2...Auch kleinere Objekte werden zuverlässig erkannt und zerstört
  • Bild 3...Ein PowerUp ist auch klein, aber auch hier sieht man das die Kollision erkannt wurde
  • Bild 4...kein Schuss geht durch das Objekt

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ach um solche Schüsse geht es. Die sind doch nicht schnell! Ne Gewehrkugel ist schnell. ;)

Da sollte es reichen, wenn du einfach den Fixed Timestep reduzieren. Steht ja auf regulär auf 0.02 und kann man ohne Probleme auf 0.01 runter stellen. Dadurch wird FixedUpdate() und alle anderen physikalischen Berechnungen doppelt sooft ausgeführt. Also anstatt 50mal/sec dann 100mal /sec.
Unendlich klein kannst du das natürlich nicht machen, weil irgendwann der Prozessor dicke Backen machen wird.
Die 0.02 steht da aber seit anbeginn der Zeit, also noch bevor die Intel I-Reihe kam. Da kannst du also ruhig ein wenig runter schrauben und alle gängigen Rechner werden das mühelos bewältigen.

https://docs.unity3d.com/2020.1/Documentation/Manual/class-TimeManager.html
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

jaaa...sowas brauche ich :) Danke...naja den Strahl habe ich jetzt implementiert und es funktioniert gut, aber damit wird es noch zuverlässiger :D 

 

Ich denke es war nicht nur die Geschwindigkeit sondern die Kombination aus Geschw. + Menge...aber wie gesagt. Es funktioniert jetzt und hoffentlich gibt es bald eine Demo vom Spiel ;) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...