Level design question

In a game called Stellaris there is a galaxy with contains many systems. As such there is a galaxy view (image 1) and a system view (image 2). Each system is viewable in the galaxy view (as the system’s star) and selecting the galaxy gives a player the option to view the system in more detail (in it’s own view). In a system, there can be ships that move around and enter combat with enemies (even while the player is not in that view). I was wondering what I what topics I need to learn about to create a similar interaction.


I’d be interested to hear what others say about this, but I would say EVERYTHING.

To get the functionality you’re talking about here, will take you many months to years of learning about and working with the engine.

Sorry to be a bit of a downer… :frowning:

Do these nodes move about a bit as well? Or can you rotate it? Just to get picture 1 working, I would say the list consists of at least

  1. Blueprints
  2. Line drawing
  3. Blueprint widget components
  4. Widgets generally
  5. Data types, including structures
  6. Materials

Maybe start with something a bit more achievable.

Agreed with clockwork. My more general question is if you are familiar with coding, at all, vs Unreal-specific stuff.

As for this type of game, it’s not so complex as one might think (to my mind). Each system, is essentially, an entry in a database/table. Your UI, as mentioned, is mainly widgets and not super-detailed meshes and the like. You’re not likely to need humanoid animations and whatnot. This type of game is administrative vs twitch, and as such, lends itself well to a table-oriented approach.

IF anything, I’d suggest looking to Niagara, particle systems. They can instance meshes as particles, so can be leveraged well to handled the ubiquitous swarms-of-ships you want fighting one another.

1 Like

Thanks for the response! I was purposefully vague in my post to not try and box myself into one solution. Seeing how that info might actually be useful, I have a good grasp of c++ (pointers, classes, data structures etc) and have made a few basic games via some classes on udemy. On the unreal side I understand blueprints (although I’m more comfortable with using their c++ counterparts frankly), sweeping, and I’ve just started to look into widgets and I have a limited understanding of the interaction between multiple levels.

To simplify the question, let’s say I have two sphere nodes each with their own “system view” and I would like an actor that move around in each system. You can forget the meshes, animations, etc I just want to know the recommended methods for going about linking the system and galaxy views. And ideally, these would both be 3D.

The way I had originally thought of was having both always active on the same level (maybe I could break it up into sublevels?) and just moving the camera based on the input. For example, say the player selects planet B (for the record I have selection figured out), the camera moves to scenario 3 in the image below. Each system in the galaxy would have a pointer to it’s corresponding system view’s location to move the camera easily. This would solve my actor mobility problem (I figure actors would not be able to move in unloaded levels). However, I fear that performance would not be kind to galaxies with many systems. Perhaps I could unload and load levels when an actor enters a system?

You probably need to stick with C++ for this, much more efficient.

As for loading the scenarios, you can either use level streaming, or Epic’s new ‘World partition’ offering.

Level streaming gives you total control, but you have to manage it. With WP, you just lay it all out, and the engine loads and unloads as need be.

Watch out though, last time I checked, WP is only based on XY, not Z.

Also, looking at the original image again, I think they’re doing some sort of 3D to screen conversion, so that all the icons are the same size / resolution. I don’t think you can actually have little signs floating around in space, as with scene depth and anti-aliasing, they would be unreadable.