Räume aneinander setzen

  • Hallo liebe Gemeinde,


    ich bin neu in diesem Forum und auch mit der Unreal Engine, daher bitte um Verständnis.
    Ich hab ein kleines Projekt am laufen und komme nicht weiter. Ich versuche mit Blueprints ein Gebäude zu erstellen, einzelne Räume werden mit modularen Böden erstellt, um unterschiedliche Raumstrukturen zu bekommen.
    Meine Frage an euch lautet, wie kann ich diese Räume so anordnen, dass diese sich nicht überschneiden? ?(


    (Dungeon Architect ist keine Option, da für Uni eigenes entwickeln muss)


    Mit freundlichen Grüßen
    Druusch

  • Ich versuche mit Blueprints ein Gebäude zu erstellen

    Die Erstellung des Gebäudes soll also automatisch (zufällig/semizufällig) geschehen, wenn du den BP in den Editor ziehst? Bisschen mehr Problemstellung bitte. Was ist gegeben, was ist das Ziel und was soll @Runtime passieren. Also was ist ein modularer Boden? Etwas was sich in X/Y anpasst oder etwas was komplexere geometrische Figuren annehmen kann? Was für Häußer sollen erstellt werden? Reichen rechteckige oder mit mehren Eckpunkten und mehreren Geschossen und unterschiedlichen Dächern? Alles @Runtime oder nur im Editor?

  • Ich weiss nicht ob ich mich korrekt ausgedrückt habe, aber ich versuchs mit Bildern.
    Ich möchte während der Runtime Häuser platzieren, die ich anhand von einigen Parametern generieren lassen will.
    Dazu möchte ich das Construction Script laufen lassen wenn ich den Actor am Ort platziere. In der Blueprint habe ich mir ein InstancedStaticMeshComponent angelegt und mit zwei Schleifen die Raumböden für zwei Räume erstellt. Da aber das InstancedStaticMeshComponent an der Location(0,0,0) liegt werden die Räume aufeinander, auf dem selben Startpunkt generiert. Ich würde gerne Ein Hauptraum generieren (Entrance) und weitere Räume um diesen Raum platzieren, aber so dass diese mit den Kanten aneinander liegen. Zuerst hatte ich versucht mit ein Grid zu erstellen und dieses dann zu splitten, habe aber bisher nicht herausgefunden wie ich ein Array splitten kann. Dann hätte ich ein rechtwinkligen Grundriss (langweilig). Daher würde ich gerne die Räume lieber aneinander snappen.


    Hoffe dies konnte euch weiterhelfen und ihr versteht was ich machen will.


  • Wenn die Häußer @Runtime erstellt werden, dann ist das zu kompliziert. Die Teilstücke brauchen eine gemeinsame Relationsgröße und dann kannst du SnapToGrid benutzen, damit der Nutzer das einrasten kann. Die einzelnen Bauteile liegen dann auf ner Hotbar. Halt ein typisches Bausystem. Es Spielt ja keine Rolle, wie groß deine einzelnen Teile sind.


    Wenn wirklich das ganze Haus gespawned werden soll und das aus zufälligen Teilen besteht, dann wirst um einen kleinen Spawnmanager nicht drumrum kommen. Dann würd ich Arrays anlegen, die Teile zusammenfassen, die an bestimmte Punkte passen und die dann zufällig ansetzen. Den Part haste ja soweit schon hinbekommen. Deine Skizze zeigt schon sehr schön, wo deine Logik ansetzen muss. Wenn es noch zufälliger werden soll, dann wird das in Textform kaum noch zu erklären sein und dann würd ich das auch mit Splines aufbauen, die das bereits gesetzte checken und dann selbstständig die Wände und Türen aufbauen, was natürlich dann etwas Aufwändiger in der Logik ist.

  • Kompliziert ist gut :D
    Ich hab mir ja schon ein Build System angelegt, dass ich während der Runtime abrufen kann und modular mir Häuser zusammen bauen kann. Ich würde halt gerne auch dass der PC mit den selben Teilstücken auch generieren kann. Wie weit dieser frei generieren kann will ich noch einschränken. Das mit den Splines check ich nicht so ganz. Dachte mit Splines kann ich Bauteile entlang der Spline generieren, dies brauche ich ja nicht (oder kann das Spline-Tool mehr?). Daher schritt für Schritt. Deswegen wollte ich halt wissen wie ich denn die aneinander setzen kann. Ich habs mit Sockets versucht, aber diese kann ich ja nur auf ein Mesh anlegen jedoch nicht für ein Blueprint, sehe ich das richtig?

  • Splines können so ziemlich alles. Aber deine Variante reicht da. Sockets auf Meshes lassen sich auch im BP auslesen, aber des Geht auch einfacher, indem zu einfach ne SceneComponent hinzufügst oder sogar ne eigene SceneComponent zu deinem BP hinzufügst. Da funktionieren quasi nicht nur die vorgefertigten sondern auch selbst erstellte. Des SceneComponent kannst dann im Viewport dahin legen, wo du die "Sockets" haben möchtest und rufst die im BP dann ab um zu snappen.


    Funktionieren tut fast alles, kommt halt immer drauf an, wie aufwändig das sein soll und wie viel Zufall mitspielt. Mit ActorBounds kannst dich ja vielleicht auch mal beschäftigen, weil aus denen Sachen ausgelesen werden könne, die für ein Buildingsystem durchaus interessant sind, bspw. Scaling.

  • Dazu möchte ich das Construction Script laufen lassen wenn ich den Actor am Ort platziere.

    Korrigiert mich, aber funktioniert das Construction Script nicht nur, während du im Editor arbeitest (und nicht @Runtime) ?

  • ConstructionScript=ErstellungsRoutine.


    Immer wenn ein Actor (Runtime/Editor) innerhalb der Engine erstellt werden muss, dann wird soweit vorhanden, dass ConstructionScript ausgeführt.


    Selbstverständlich klappt das ConstructionScript auch @Runtime, wäre auch schlimm, wenn nicht, denn dann muss ich alles kopieren und ins EventScript verpacken.


    Die englischen Bezeichnungen machen es eigentlich auch schon recht deutlich, wo der Unterschied liegt.


    Das ConstructionScript wird im Editor bei jeder Veränderung ausgeführt und @Runtime nicht, was der wesentliche Unterschied ist.


    Wenn man im Editor den Actor manipuliert, dann wird bei jeder Manipulation das ConstructionScript ausgeführt. Als Beispiel kann man einen RandomWert ins ConstructionScript schreiben, der zufällig einen Mesh einsetzt. Verschiebt man jetzt das Objekt im Editor oder dreht es, dann sieht man, wie jedesmal zufällig ein Mesh eingefügt wird, was natürlich @Runtime nicht passiert, wenn man da das Objekt verschiebt. Allerdings werden auch da bei dem selben Actor zufällige Meshes eingefügt, sobald man den Actor spawned.