That’s a really good idea; to be honest I was originally going to do something similar but came across the method by which the game actually generates their levels and decided to port it over. I made the assumption that instances would be able to handle it but I think I’m long past that by now. I think I’ll do that (:
In my design documentation I initially wrote that it would be perfectly fine to have static levels as long as all of the dynamics changed (spawn point, enemy locations, items, ect.) but I’m a sucker for algorithmic generation. My original reason for even getting into said generation is because of Spelunky. I learned that it’s actually room based with tiles added and removed and so I tried making rooms in UE4 using like. 12 cubes in a single blueprint and sticking them together and then making an algorithm that placed those blueprints aaaaaand…
It crashed. Lmfao it crashed so hard. I immediately found out about HISMC and tried to make it work that way using meshes I made in Blender but it wasn’t clicking so I decided to use cubes to generate a level like Nuclear Throne’s and uh. here I am. Full circle on a tangent. I think that what you’ve proposed is the best of both worlds though. I can retain design control where it matters (what I wanted) and the world isn’t exactly the same in its geographical layouts. I was worried that I’d have to start generating them, recreating them in Blender, and then storing them in memory, blowing up the size of the game while taking time to model some (honestly) inflexible and boring meshes.
Anyway, thank you VERY much for all of the help you’ve given me. I think it’s time to mark this one as answered. :3 You’ve more than earned it!
Cool man. Glad I could be of some help. You could still generate the level through an algorithm but using the dozen or so larger pieces would really help make everything more optimized. Make it so your level uses only 20 or so of the major block meshes to build the entire level and then fill in or pad other portions with the cubes. You always have to think about how you can boil everything down into its most basic form
Good luck with the rest of the project. Hit me up whenever you finish it!
Maybe you have an idea for this part as well?
Just ran into a problem. Tl;Dr how to fill in the gaps/outer walls?
My generation looked like this before:
Make floor. On place cubes set its XYZ to a Vector Array.
Get the min x, min y, max X, max Y, and do a for loop to fill in the locations with cubes if a cube wasn’t already there (vector array contains? Node). How would one do this in this situation? Specifically with a “floor panel” that isn’t uniform at all and rotates and translates… How do I even fit them together so that they don’t overlap? Coming up with one solution as we speak but idk.
Since they’re pieces that can be rotated I could get the 4 possible rotations and just build separate wall meshes for each side thag can be disabled based on whether it’s an exterior wall based on some check? Idk.
Overlap issue is covered by smart design probably. Flat edges with no weird jutting unless it’s an “edge piece” and only jut on the outside not the inside.
I’m sure I’ll figure it out. Yay sleeping. XD
Edit: edge pieces always go on the outside to make walls, sure. Then different inner pieces with built in walls that can rotate. Just have to work out how to prevent unwalkable areas. Eh hem. Tomorrow.
I’m curious… why are you making the levels auto generated rather than building them by hand? Is it because you want to create an infinite number of levels or is there another reason? Cause I’ve personally always been a fan of hand crafting levels and I’d bet you could make an entire level in less than an hour if you were to build it by hand. i.e. you’d likely be able to create a few hundred levels in a month or two.
I’m a total noob when it comes to blueprints to be honest so I can’t be much help there.
What I’d likely do is create a “universal” block blueprint with a public static mesh so you can quickly swap out the mesh it uses. Then I’d add some public bools to apply positive or negative value for the scale for randomized mirroring in X and Y (i.e. “Mirror X” and “Mirror Y” bools) and then just drag in a dozen or so to the scene and save it as “MissionBase.umap”. Then Save As again and call it “Mission01.umap”, move the blueprints around in the scene, set your rotation snap to 90 and your grid snap to whatever the scale of a single cube is and very quickly move the blocks around till you’ve got a level built out. If you place the pivot point of all the blocks in the top left corner of the mesh everything will snap together easily. You could probably build out a complete level’s layout in 5 - 10 minutes. Then open the MissionBase map again, Save As “Mission02” and repeat. You could easily block out a dozen levels in a day and then go back and detail them up with another 50 mins.