Objekt Kollidiert mehrfach mit Overlap Box

  • Tach Community,

    wollte mal eben anfragen wie ich es hinbekomme das ein Objekt nur einmal von meiner Overlaping Box erkannt wird? Mit der "do once" Node komme ich hier leider nicht weiter, da mehrere Objekte gleichzeitig in die Box wollen.

    So habe ich beim betreten der Box das Problem das die Objekte manchmal mehrfach gezählt werden. Ebenso beim verlassen. So fällt eine Kugel aus meiner Box und anstatt das sie abgezählt wird von meinen gesamt Objekten, kann es passieren das sie dazu gerechnet wird.

    Also wie bekomme ich das mit der Kollision auf die Reihe? :D

    Hoffe jemand hatte das auch schon

  • Hallo, weiß nicht ob ich weiterhelfen kann, aber wie wäre es, wenn du den Objekten eine Variable zuweist, die du in deinem Actor mit der Boxcollision abrufst und wenn sie overlappen +1, wenn sie end overlappen -1.

    Im Levelblueprint oder Gamemode, könntest du mit get all Actors of class alle Objekte abfragen die diese Variable haben und dann entweder getrennt oder gemeinsam ausgeben.


    Hoffe war eine Hilfe, ciao und schönen Abend

  • Rein in der Theorie würde das sicherlich gehen, im Grunde habe ich auch sowas. Nur leider besteht das Problem ab dem Collision Event, welches auch bei deiner Methode auftreten würde. Hier mal eben das Overlaping:


    Externer Inhalt blueprintue.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.



    Dazu noch das Fahrzeug in dem sich die Box befindet


    Ich kapiere hier einfach nicht wie es sein kann dass das Objekt welches in die Box fällt beim rausfallen wieder als Input gezählt wird. Fängt hier das Objekt ein wenig an zu Wackeln, kommt Ue4 nicht mehr darauf klar. Also brauche ich wahrscheinlich wirklich eine Abfrage für jedes einzelne Objekt welches rein und raus geht (mit Delay)

  • Ich glaube ich habe was an der Klatsche. Ich habe das auf so viele methoden Probiert hinzubekommen. Diese war ich der Meinung habe ich auch schon getestet. Jetzt plötzlich funktioniert es einwandfrei. Ein Objekt was raus und rein dopst wird trotzdem nur als eins gezählt. Danke dir :S

    • Offizieller Beitrag

    Smily Was hast du den konkret vor ?


    Wie wie wäre wenn du die Objektanzahl und die Objektnamen in einer Variable hinterlegt.

    Wird das Auto in der Kollision erkannt, setzt du die Bauteile auf True die von der Collision erfasst wurden. So wird jedes Objekt nur einmal gezählt und vor allem weißt du ob alle Bauteile gezählt wurden.


    Ich könnte mir auch vorstellen, statt einer Kollision Box eine Triggerbox zu nehmen und dort den Inhalt abzufragen auch hier könntest du die Bauteile auf True setzen. Wäre vielleicht performanter als das über die Kollision zu regeln.


    Das kommt aber echt darauf an was du vorhast.


    EDIT da war ich wohl zu spät :thumbup:

  • Kurz zur Vorstellung. Ich probiere mich gerade an einem kleinen Mini Game wo du die Aufhabe hast ein Fahrzeug mit entsprechender Ladung von A nach B zu fahren. Dabei gibt es ein paar Fallen auf der Strecke. Noch dazu Baue ich einen Gegner Spieler ein der unseren Fahrer den Job etwas erschweren soll^^

    Im Grunde ein Simples kleines Game zum einsteigen.

    Die Ladung fällt am Anfang des Levels von Oben auf das Fahrzeug herunter. Fällt während der Fahrt was runter, wird diese entsprechend vom Endscore abgezogen. Mal schauen was ich noch so einbringe


    Wollte mal ein kleines Game machen was ich theoretisch auch mal fertig bekomme

    • Offizieller Beitrag

    Wieso löst du das nicht über den Abstand zwischen Fahrzeug und Ladung ?


    1.Etwas fällt auf das Fahrzeug = Wird zum Score hinzugezählt.

    2.Verliert der Fahrer etwas unterwegs, kann er es nicht mehr aufnehmen? Ist das Fahrzeug in einer gewissen Distanz zur Ladung wird die Ladung vom Highscore abgezogen.

    So kannst du dir das ganze kollisionsge dönze sparen.


    Wenn du die Ziellinie überquerst steht das Ergebnis schon fest.

    • Offizieller Beitrag

    Musst du die Kollision nicht auch ständig abfragen ?


    Ich weiß nicht ob das über die Kollision nicht zu fehleranfällig ist. Du arbeitest mit Physik? Was ist zb wenn ein Baueil beim Beladen danebenfällt und stärker abprallt und vom LKW fällt. Vielleicht wäre es einfacher das Beladen Automatisch zu machen per Animation und dann die Bauteile in einer Variable speichern.

    Die Bauteile werden am Fahren sicherlich gut durchgeschüttelt oder ? Dabei kommt es ja andauert zu Kollisionen die du überprüfen musst oder wie stellst du fest ob ein Bauteil runtergefallen ist ?

    Wahrscheinlich: Kollidiert nicht mehr mit Fahrzeug = -1


    Das ist auch viel Rechnerei.

  • Das abziehen der Items habe ich über EndOverlap gemacht.

    Wie genau ich das Distanz basierend machen kann müsste ich mich entsprechend mehr informieren. Nutze das natürlich zum Lernen^^ will die ganzen Thematiken besser verstehen. Werde es also mal versuchen durch die Entfernung zu berechnen

  • Sleepy ich glaube ich brauche da mal deine Hilfe^^

    Habe das jetzt mal so gemacht wie du gesagt hast. Ich setzte in meinem Fahrzeug eine Vector Variable für die Fahrzeug Position. Im Item BP setzte ich eine Vector Location meines Items. Anschließend Subtrahiere ich das Item von der Fahrzeug Location und gebe mir entsprechend die VectorLenght als Float aus. Ist Die Float kleiner als 850, habe ich mein Item Verloren. Das funktioniert soweit Super. N


    Was mache ich nun aber mit mehreren Items. Sprich es Spawnen direkt 5 Kugeln auf meiner Ladefläche. Habe das Probiert mit einer DataTable, nur komme ich damit nicht wirklich weiter.


    Ich frage mich hier am ende ob das wirklich mehr Performance Sparender ist. Ich verwende immer noch Tick Variabeln zum Abrufen der Entfernung.

    Wäre Super wenn du mir da weiter Helfen kannst^^


    Hier das Item BP



    Jetzt müsste ich noch die Menge herausfinden :D

    Das Overlap Event war bis dahin leichter (Will es aber auch nicht zu leicht machen. Muss ja was lernen)

    • Offizieller Beitrag

    Wie hast dir das den grundlegend vorgestellt ? Dein Fahrzeug steht unter einem Kran und wird mit einer zufälligen Menge an Packeten gefüllt ? SUV hinten auf die Bridge fertig ?

    Dein Kran oder was auch immer du verwendest könnte doch eine Zufalls Zahl generieren zb eine Zahl zwischen 1 und 10. Das ist die Variable (var Random) für die Anzahl der Pakete

    Gehen wir mal davon aus var Random ist = 5 dann hat dein Fahrzeug 5 Packete geladen. Es wird somit 5 Zufällige Packete auf der Ladebridge angezeigt.


    Was mache ich nun aber mit mehreren Items. Sprich es Spawnen direkt 5 Kugeln auf meiner Ladefläche. Habe das Probiert mit einer DataTable, nur komme ich damit nicht wirklich weiter.

    Ist es den wichtig was für ein Packet es ist ? SInd die alle gleich oder verschieden ? Würde es nicht reichen wenn du ein Integer hochzählst. Wenn du noch andere Informationen speichern willst, dann brauchst du wohl ein Array. Data Table bringt dir nichts da du in ein Data Table nur über Umwege Schreiben kannst. Data Table ist eher nur lesen statt schreiben.


    Ich frage mich hier am ende ob das wirklich mehr Performance Sparender ist. Ich verwende immer noch Tick Variabeln zum Abrufen der Entfernung.

    Wäre Super wenn du mir da weiter Helfen kannst^^


    Hier das Item BP

    Mach das doch so: Du machst eine Trigger box an deinem Fahrzeug fest oder vielleicht auch um dein Fahrzeug herum. Die Triggerbox ist fest mit deinem Fahrzeug verbunden und für den Spieler undsichtbar sie fährt mit dem Fahrzeug mit.

    Kommt etwas mit ihr in Berührung weil etwas von der Brdige gefallen ist, wird der Event gestartet. Jetzt könntest du die Entferungen von der Fahrzeug Position als Gegenproble + Toleranz einmal abfragen die Entfernung messen (var = Toleranz) und prüfen ob das Packet zb + 100 XYZ vom Fahrzeug entfernt ist.Dann die gesammtmenge der Packete abziehen die runtergefallen sind.


    Jetzt hast du ein paar Möglichkeiten was du mit den Zahlen anstellen kannst:

    1.Ab einer bestimmten Entfernung zum Fahrzeug könntest du das Packet außerdem komplett aus dem Spiel nehmen. zb wenn Var Toleranz größer ist als xyz dann remove Packet xyz.

    2.Du hast einen Counter für die Gesamtanzahl der Pakete die ausgeliefert werden müssen das ist var = Random

    3.Deine Beladung ist zufällig je nach wie hoch die Zahl var = random ist werden auch Packete auf der Bridge angezeigt ab diesem Zeitpunkt wird die Physik aktiviert so das beim Beladen nichts runterfallen kann.

    4.Du kannst zu jederzeit prüfen wie viele Packete sich noch auf dem Fahrzeug befinden und die kannst dies auch mit der Zahl vergleichen die mit der Triggerbox kollidiert sind.


    Wenn du das mit der Position machen willst, dann überleg dir eher ob du das nicht über einen Linetrace machen willst. Dabei wird eine Line von deiner Fahrzeug Position zur Packet Position gezeichnet die Länge des Strichs kannst du messen.

    Ist der Linetrace länger als xyz dann ist das Packet runtergefallen.

    https://docs.unrealengine.com/…TraceByChannel/index.html