Help with Content Packages

So in my game you are going to be able to switch between different spaceships. But doing so will change the whole aesthetic or theme to the game.

So Obstacles to avoid may change from Asteroids, Satellite Debris and Destroyed Spaceships to Doughnuts, Pastry Goods and Cakes.
The Stars change to sugar cubes.

You get the picture.

But to do this, I would like to have an abstract class/bp or struct which lays down the foundation of what goes in one of these content packages so that when you go into the main game loop I know what package the player choose and can outfit all aspects of the game with the correct visuals accordingly. But doing this have proven to be a challenge. I have tried by first simply making some abstract BPs and then make children of those BPs. But this leaves me with a problem in a few places, mainly when I can’t change variables like an array of different obstacles:

Found in my AbstractObstacle Blueprint:

Foud in my DefaultObstacle Child Blueprint:

I also found that calling “Set Default Pawn Class” on the Gamemode at the Level Blueprints “Begin Play” event doesn’t do anything.

How would I overcome these issues and make the packages that I’d like to pass to my level?

So right off the top of my head while reading this, you would have an Enum (named Themes) with all the different types of aesthetics or themes in your game. Then you would simply check the Themes enum and load in the different BPs according to the position in the list on the Themes enum. All of the “sugary” stuff under 1, all of the “spicy” stuff under 2, all of the “naughty” stuff under 3, all of the “nice” stuff under 4, etc.

It would keep track of what theme you have selected because you stored that information into an Int variable named ThemeSelected. Then under your arrays and structs for meshes and things, you have the index number of what you need.

Is that somewhat close to what you are requesting?

Yes, but if I had an abstract parent that all the children just extends or inherits from, I can make general functions that just takes a package and pulls out all required information the exact same way every time, instead of having to make a separate use case for each package. Making the package is where I struggle.

Then I would put in the abstract parent the integer variable “ThemeChosen”. In the children, I would Select Int from the ThemeChosen variable and spawn appropriate stuff based on what was selected. Example, having the 1 selection perform the spawning of the sugary donuts in the collectibles blueprint, the gingerbread walls in the walls blueprint, etc. The 2 selection perform the spawning of the red hot chili peppers in the collectibles blueprint, the cayenne peppered walls in the walls blueprint, etc.

Okay so, here is how I’d carry it out in code:


  1. I make Abstract Parents.
  2. I make children of those parents so that I can override their values.
  3. I make a struct that contains all the necessary children to form a session.
  4. Since every Struct has an ID, that ID is what will be looked for. They are all listed in the Enum by name (as you tend to do with Enums).
  5. When I know which package it is, I then take all the assets in that package and assign to different things like the game modes default pawn, obstacles to the obstacle spawner, etc.

And that’s how I imagine I’d like to do it, but I don’t seem to be able to do it this way in Blueprint, or I am simply too inexperienced.



Have you tried using Tags? You could create all of the objects as children of your parent objects and just add a couple of tags to them. Eg. Tag Asteroid, RealAsteroid. On you proper asteroid or Asteroid, Donut on the other 1 and just assign their mesh etc on spawn based off of the tags they have.