Merkwürdige Abfrage von Collisions

  • Verstehe :)

    Mir ist da übrigens etwas über Nacht eingefallen. Kann man die Collisions nicht irgendwie miteinander automatisch Mergen lassen, wenn sie nahe genug beieinander stehen, wenn man sie gesetzt hat? Dann hätte ich eine saubere Fläche, über die die Murmel Rollen und nicht mehr Hüpfen würde. Ich könnte wetten, das geht! Ist ja dann im Prinzip auch nichts anderes, wenn man in einem Wirtschaftsspiel Straßen oder Gleise baut. Nur eben mit Collisions, die bei mir eh simple fbx-Meshes sind mit einem durchsichtigem Material.


    EDIT: Also nicht die Meshes als eine Gruppe an sich miteinander Mergen, sondern nur die angrenzenden Vertices, Faces, Edges der Collisions.

    • Offizieller Beitrag

    Der Clou dabei ist ja, dass entweder das eine oder andere Mesh bei einer Kollision triffst.

    Grundsätzlich sind Kollisionen eine sehr rechenintensive Berechnung. Ob derartige Konstrukte zielführend sind, mag ich zu bezweifeln.

    Bei Wirtschaftspielen werden Straßen über Splines gesetzt das geht nicht über Collision.

    Collisions sind ja auch keine Meshes die man einfach mergen kann. Collisions sind im grunde nichts anderes als: Haben sich sich Meshes berührt. (Ja oder nein)

    Oder zumindest: Wenn ja dann passiert...


    Warum machst du nicht einfach ne Plane 1mm höher wie deine Cubes, diese Plane ist ein reiner Collider auf der deine Kugel rollt. Dann wäre die Sache doch erledigt.


    Ich weiß halt auch nicht was du final vorhast.



    Vielleicht postet du mal ein paar Screenshots

  • Ich kann demnächst mal ein Video hochladen denn das Gameplay ist ein wenig komplexer, als nur auf einer Plane herum zu rollen :)
    Ich habe halt auch Schienen (Wie bei Flipperautomaten), Loopings, Kurven, Hügel, Dellen (Bzw. Wellen). Da ist es mit einer Plane, die meiner Murmel folgt, nicht getan.

  • Ich hab mal ein kleines Video gemacht um mein Problem zu verdeutlichen:
    Collision Issue


    Und ja, ich muss meine Spielfeld aus Einzelteilen bauen, da der Fokus stark auf Modularität gesetzt ist :)

  • Das Problem tritt dabei dann auch nicht mehr auf, wenn ich nur auf einer großen Plane herum rolle. Aber da die Landschafft nun mal aus Blöcken, Loopings, Kurven etc. besteht, komme ich um eine andere Lösung leider nicht drum herum

    Die AAAs tricksen garantiert aber an solche Fähigkeiten komme ich als Normalsterblicher nicht ran


    Doch die Fähigkeiten für die Tricks hast du auch, denn du hast es sogar ja selbst gemacht :D
    Auch wie Sleepy schon sagt. Selbst wenn alles aus Blöcken besteht. Mach dir doch eine einfache Plane mit einer einfachen Collision, diese kannst du dann so skalieren wie du die gerade brauchst. Die machst du dann halt auch nicht sichtbar.

    Die gute alte Alpha-Wand halt.

  • Mir ist irgendwie aufgefallen, dass die Kugel nicht bei jedem Übergang springt, kann das sein?

    Lass dir doch einfach mal die Kollision im Level anzeigen. Vielleicht fällt da ja schon optisch etwas auf.


    Ansonsten, man kann Kollisionen ja auch per BPs erstellen, bestimmt findet man auch eine Methode, um mehrere Module zusammenzufassen und dann halt die Kollision dafür zu generieren.

  • Bralligator

    Ach so? Und welche Tricks? Steh ich da gerade auf dem Schlauch? Also bisher hab ich keinen Trick aktiv angewendet Bzw. den ich anwenden könnte, der mir da weiter hilft 😅


    Wie bewerkstellige ich das dann aber mit der besagten Plane? Die muss sich ja dann quasi auch nach dem ausrichten, wo Böden, Wände, Decken, Schrägen usw. sind. Da hab ich keine Ahnung, wie ich das mit Blueprints verwirklichen soll. Vielleicht kann mir das Einer zeigen und mir helfen, so ein System zu bauen. Gerne auch gegen Bezahlung. Hauptsache das Problem ist aus der Welt 🙂


    Tomarr

    Ja, die Murmel springt nicht immer. Sogar, wenn ich nur ganz langsam an so eine vermeintlich Kante rolle ist es so, als wäre da eine kleine Schwelle, über die dich die Murmel nicht traut und wieder zurück rollt.


    BPs kann ich gerne mal probieren. Vielleicht klappts ja dann besser...

    • Offizieller Beitrag

    Mir ist irgendwie aufgefallen, dass die Kugel nicht bei jedem Übergang springt, kann das sein?

    Ich glaube, das liegt daran, dass es darauf ankommt, wie die Kugel auf den Quader auftrifft. Hier gibt es meiner Meinung nach nur zwei Möglichkeiten:

    1. Oben (So sollte es ja auch sein)
    2. An der Seite (Dort sollte die Kugel nicht aufprallen)

    Ich glaube, wenn die Kugel oben auftrifft, läuft alles, wie es soll, und es findet kein Sprung statt. Wenn die Kugel vorne auftrifft, findet eigentlich auch kein Sprung, sondern ein Abprallen statt. Dieses Abprallen ist jedoch eine Vorwärtsbewegung, da deine Kugel Schwung hat.

    Überprüfe doch einmal Folgendes: Deine Kugel hat eine Geschwindigkeit. Lass dir diese einmal als Print Ausgabe anzeigen. Überprüfe, ob sie während der Sprünge langsamer wird, denn das möchtest du sicherlich auch nicht.


    Ich glaube weiterhin, das Problem liegt im Übergang von Cube zu Cube. Deshalb wäre es sinnvoll, zunächst einige Tests durchzuführen, um sicherzustellen, dass das Problem nicht woanders liegt.


    1.Erstelle erstmal eine riesige Plane und lege sie direkt auf die Oberseite deiner Cubes. Ich weiß jetzt kann deine Kugel nicht mehr runter fallen. Aber Interessant wäre ob sie so immer noch springt. Falls das Problem noch auftritt, nimm mal die Collider von den Cubes runter.

    Wenn deine Kugel auf diesem Collider normal und ohne Sprünge rollt, dann liegt es doch definitiv an den Cube Kolliders


    2.jetzt machst du alle Collider von allen Cubes und Ground Objekten auf denen sich die Kugel bewegt runter.

    Du erstellt einen kleinen Collider der so groß ist wie deine Cube Oberseite.

    Du machst mehre davon aneinander und rollt auf denen einmal lang. Ich möchte wissen ob das Problem auch auftritt wenn sich um eine Plane statt einem Würfel handelt. (Stell dir vor du hättest keine Cubes sondern Planes)

    Ich glaube dann tritt das Problem nicht auf weil eine Plane keine Vorderseite hat hat der der Würfel abprallen kann. Eine Plane hat nur eine Oberseite.


    3.Wenns immer noch Probleme gibt, prüfe was passiert wenn du zwischen den Überfängen einen Collider plazierst. So quasi wie eine Brücke von Cube zu Cube.


    Ich denke bekommst du mehr Kenntnisse darüber wie das Problem entsteht. Versuche auch mal, die Planes etwas höher als die Würfelfläche zu legen. quasi einen mm über dem Würfel.


    Je nach Ergebnis hast du nun mehre Möglichkeiten:


    1.Du könntest aus all deinen Objekten auf der die Kugel rollt die Oberen Fläche von einem Mesh lösen und daraus ein Collider machen. Du hättest dann nur noch einen Planaren Y Collider.


    2.Du baust ein komplexes System:

    Deine Kugel bekommt eine Triggerbox die sich mitbewegt und die mindestens eine Cubegröße größer ist als deine Cubes. (Unsichtbar für den Player)

    Alle deine Cubes bekommen ebenfalls eine Triggerbox.


    Du machst du eine Abfrage: Wenn die Kugeltriggerbox mit einer Cube Triggerbox Kollidiert, spawnst du über dem Cube einen Collider.


    Im Grunde: Wenn sich deine Kugel einem Cube nährt, bekommt dieser Cube einen Collider. Somit bauen sich die Collider vor der Kugel auf und verschwinden wieder wenn du über den Cube gerollt bist.

    Ich könnte mir auch vorstellen, den Collider etwas größer als den Würfel zu machen. Somit hast beim überrollen von Cube zu Cube wieder die Brücke. Den Collider Killst du dann, wenn die Kugel die Mitte des Würfels erreicht hat.


    Somit hast du einen Übergang von Cube zu Cube und deine Kugel fällt runter wenn sie über den Rand rollt.


    3. Du könntest auch den umgekehrten Weg gehen: mach dir deinen Riesen Collider der über deine gesamte Fläche geht. Du machst an den Seiten wo die Kugel runterfallen soll eine Triggerbox hin. Berührt die Kugel diese Triggerbox, wird der Collider deaktiviert und die Kugel fällt runter. So definierst du nicht über die Collider wann die Kugel fallen soll, sondern durch Triggerboxen.


    Das ist 3 Varianten die mir einfallen.


    Ist der Text mal wieder lang geworden sorry

  • Sleepy

    Alles gut, du erklärst das immer sehr gut, danke erst mal dafür :)

    Also 2.) fand ich ganz spannend. Das habe ich auch sofort ausprobiert aber wenn ich nur Planes aneinander reihe, dann wird das Sprungverhalten sogar noch schlimmer. Aber das hätte echt klappen können - Schade. Scheinbar liegt es dann eher daran, dass die Engine denkt, die Murmel fällt kurzzeitig in einem einzigen Frame und da dann doch etwas kommt, prallt die Murmel an der nächsten Kollisionsoberfläche ab und springt deswegen. Es zieht die Murmel also eher nach unten. Okay, also habe ich mal ein bisschen mit der Gravity herum gespielt. Mein jetziger Wert liegt bei -5000. Okay, hab mal die Defaulteinstellungen von -900 genommen, Problem taucht trotzdem auf. Egal, bei welcher Gravity, immer Springt die Murmel. Also lasse ich -5000, denn das bringt das realistischste, physikalische Ergebnis. Wenn ich die Collisions ein wenig größer ziehe, dass sie sich überlappen, gibt's genau so Probleme. Das ist echt irre merkwürdig, dann hier kann die Engine nicht davon ausgehen, dass die Murmel in einem Frame kurzzeitig fällt.


    Es scheint egal zu sein, wie ich mit den Collisions arbeite, welche arten ich nehme und wie ich sie ausrichte, das Problem bleibt stätig vorhanden.


    EDIT: Ich probiere mal 1.) aus: Eine riesige Plane auf die anderen Collisions zu legen und dann drüber zu rollen.

    EDIT: Springt trotzdem.

  • Jetzt nur mal theoretisch, ich habe nicht wirklich eine Idee, ob das funktionieren könnte.

    Wenn ich dich richtig verstanden habe, dann ist es für den Spieler modular zusammensetzbar, also er kann sich eigene Bahnen bauen, richtig?

    Wenn ja, fragst du auch irgendwie ab, ob die Bahn geschlossen ist, oder ob es Nachbarteile gibt oder so, oder verlässt du dich da rein auf die Kollision?


    Also, wenn du ein System hast, welches quasi die Bahn analysiert, ob es benachbarte Blöcke gibt, ob sie geschlossen ist, oder was auch immer, dann versuche doch mal, nachdem der Bau der Bahn abgeschlossen ist, diese als ein Object zu sehen und dann automatisch ein Kollisionsgitter zu erstellen.

    Schwer zu erklären, merke ich gerade. Nehmen wir mal meinen Liebling Minecraft für den Erklärungsversuch. Bei Minegraft gibt es ja Redstone, mit dem du elektrische Leitungen legen kannst. Redstone merkt halt, ob ein anderes Redstoneteil angelegt ist, wodurch es ein "Kabel" wird und dann den Strom dadurch leitet. Ich glaube, bei anderen Speilen gibt es sowas auch mit Rohrleitungen usw, da muss ja auch Anfang und Ende erkannt werden.

    Also irgendeine Routine, die dann den Aufbau virtuell, damit du sie eventuell später wieder verändern kannst, als ein static Mesh erkennt. Und dann diese Informationen nehmen und über dieses generierte Mesh ein Kollisionsgitter erstellen.

    https://docs.unrealengine.com/…ingUpCollisionProperties/

  • Richtig, der Spieler und ich als "Entwickler" wollen uns die Bahnen selber bauen können. In ferner Zukunft könnte man quasi auch Strecken dann mit anderen Spielern tauschen oder deren Strecken selber Spielen. Je modularer, desto besser.


    Und nein, ich frage bisher noch nichts ab, was die gebauten Elemente angeht. Ich habe auch keinen Plan, wie ich das machen sollte. So tief stecke ich leider nicht in der Materie. Für die Grundlegende Steuerung und das Widget bzw. Das Menü reicht es aber :)


    Ich hab leider keine Ahnung, wie ich etwas auslesen lassen kann :(

    • Offizieller Beitrag

    EDIT: Ich probiere mal 1.) aus: Eine riesige Plane auf die anderen Collisions zu legen und dann drüber zu rollen.

    EDIT: Springt trotzdem.

    Wie? Du nutzt die große Plane und es springt trotzdem ? Wie kann dass den Sein ? Dann gibt es ja im Prinzip nichts was die Kugel springen lassen kann.

    Bist dir den Sicher, das dass springen überhaupt von den Cubes kommt? Wäre es vielleicht möglich, dass der Sprung durch die Rotation der Kugel zustande kommt ? Wie ein Rad was auf einer Seite eine Ecke und und alle 360grad springt das Rad in die Luft.


    Ich finde musst das noch mehr eingrenzen ob das Problem an der Physik, an den Cubes oder an etwas anderes Liegt.

    Solange das nicht klar ist, finde ich, brauchst du dir über Möglichkeiten keine Gedanken machen.

    Du musst erstmal die Ursache rausbekommen und dass kannst nur du in dem du verschiedene dinge testest.

  • Ich habe mir das Ganze noch einmal durch den Kopf gehen lassen.


    Was mich während der Unterhaltung immer wieder irritiert hat, ist, dass du die Gravitation auf -5000 eingestellt hast. Die reale Gravitation der Erde ist aber -9,8, was ja der Vorgabe in der Unreal Engine von -980 entspricht.

    Wie schwer ist eigentlich deine Kugel? Für gewöhnlich müsstest du das Gewicht/Masse der Kugel anpassen, um eine reale Fallgeschwindigkeit zu bekommen. Ich habe da mal gegoogelt, und eine Flipperkugel, Durchmesser 27 mm wiegt immerhin 81 Gramm. Wenn du mit Werten arbeitest, die deiner Kugel entsprechen, geht das vielleicht besser.

    Also, die physikalischen Werte der Kugel, des Materials auf dem sie gerade rollt usw., sind mit Sicherheit nicht ganz unwichtig bei der Sache.

  • Sleepy

    Naja, du sagtest ja, dass ich eine Plane auf die Oberseite meiner Cubes legen soll. Quasi überschneiden sich ja dann die Kanten, wo die Murmel anfängt zu springen, mit der großen Fläche der Plane. Und da die Kanten der Cubes anscheinend immer noch herausstechen, bleibt das Problem natürlich vorhanden, was mich irgendwie auch nicht wundert. Ich denke, ich brauche da auch nichts mehr weiter eingrenzen, die Sache ist für mich klar. Hilfreicher wäre es, wenn sich das jemand mal direkt anschauen könnte. Dann bräuchte man sicher auch nicht mehr so viel Rätseln :)


    Tomarr

    Da hast du in der Theorie nicht ganz unrecht. Das Ding ist nur, wenn ich den Standartwert auf 980 lasse. Dann Springt die Murmel trotzdem. Erhöhe ich die Masse, fällt die Murmel aber genauso schnell bei 1Kg so wie bei 1.000.000Kg. Da ist nichts da, was die Murmel abbremst oder schneller fallen lässt. Das funktioniert irgendwie nur mit erhöhter Gravity aber nicht mit erhöhter Masse. Und die Gravity auf 980 zu lassen, macht die Kugel so irre langsam, was das fallen angeht. Wie in Zeitlupe.


    EDIT: Das Einzige, was sich bei erhöhter Masse verändert, ist der Aufprallsound. Je mehr Masse, desto lauter und je weniger Masse, desto leiser der Aufprallsound ^^

  • Da hast du in der Theorie nicht ganz unrecht. Das Ding ist nur, wenn ich den Standartwert auf 980 lasse. Dann Springt die Murmel trotzdem. Erhöhe ich die Masse, fällt die Murmel aber genauso schnell bei 1Kg so wie bei 1.000.000Kg. Da ist nichts da, was die Murmel abbremst oder schneller fallen lässt. Das funktioniert irgendwie nur mit erhöhter Gravity aber nicht mit erhöhter Masse. Und die Gravity auf 980 zu lassen, macht die Kugel so irre langsam, was das fallen angeht. Wie in Zeitlupe.

    Das wundert mich ein wenig. OK, ich habe noch nicht so viel mit Physik gemacht, außer damals meine Paintballs ausprobiert. Aber, es gibt ja noch wesentlich mehr Einstellungen, wie ich inzwischen festgestellt habe, und sie alle klingen so, als wenn sie zur Problemlösung beitragen könnten. Nur, leider kann ich es nicht ausprobieren, da ich ja den Rest von deinem Spiel nicht mal eben nachprogrammieren kann. Deswegen schicke ich dir einfach mal einen Screenshot mit den Einträgen, die ich meine.

    An den Stellen, die ich markiert habe, gibt es ja Einschränkungen. Beim Mode gibt es Planeeinstellungen. Und eben halt auch Impulse, die ignoriert werden.

  • Oha, interessant, das werd' ich gleich mal ausprobieren, danke!


    EDIT: Da tut sich nichts. Immer noch das Problem.