Blueprints with many components make the editor almost too slow to use

I’m working with blueprints that have thousands of components, and I need the construction script to change which components are visible whenever the actor is moved. However, the blueprint is so slow that there’s a delay of almost 10 seconds before you see the viewport update after a change is made, making it almost impossible to work with. Am I doing something wrong, or is this just an engine limitation?

2 Likes

I think you can turn off the ‘update on move’ feature which might help. Then, you can move it without it going through that update every tick (or however often it does it) and refresh the actor when it’s in place.

2 Likes

Looked a little further. If you go into your blueprint, click ‘Class Settings’ at the top and then look in the details panel, the first option should be ‘Run Construction Script on Drag’. Turn that off. You may have to re-compile the BP after you drag it to get the updated construction script, but that’s better than having it run that as you drag it into place. Hope that helps.

3 Likes

Thank you so much, that helps a lot. One more problem I’m having is that when I make a change in the blueprint editor it takes 10 seconds to update, so I was wondering whether that was something that could be fixed or if it was just an engine limitation.

Separating the blueprint into graphs can be really helpful. Do not use only one graph, which is the Event Graph. Create many others and work on them instead.

Also I don’t think having thousands of component in one single blueprint is a good idea. But then it’s just an opinion.

Thanks for the tip, I was about to ask this in the forums!

The event graph is completely empty, I only use the construction script. Having thousands of components is necessary because of how detailed the facades are, here’s a screenshot of some of them:

http://i.cubeupload.com/bUO4VK.png

If you are trying to create different details on the walls, it is still wrong to do it in construction script. Many people would suggest doing this with materials instead.

Also even if you want to have full control on the facades, you can still use other graphs and use Being Play to place your details, instead of having them all in Construction Script.

My humble suggestion are these;

  1. Separate the meshes as much as possible and make blueprints out of them. It is easier to have many blueprints not for yourself but the engine too. Having an entire village as a blueprint is worse than having 50+ blueprints separated.
  2. Use Construction Script to test the details, but after you are happy with the result, drag the nodes into another graph and link that graph to Event Graph via events. Basicaly have only BeginPlay in your Event graph and make it call other functions/events on other graphs to place those details in the beginning of the game.

Give them a try, you might have a better performance in the end.

If I placed the details using a beginplay event, wouldn’t that mean I would have to spend hours setting up and getting the position of every component? It seems like just having a slow BP would be better than taking the time to do that. I’ve separated the meshes as much as I possibly can already, I need a lot of little variations in the different facades.

I’d like to hear how this turned out if you got the time.

Thanks for the solution. Helped me a lot.
I had this issue when i was using a lot of nested child actor components, which also had child actor components. Even is the child actor was very simple, the blueprint editor would lag. To me it seemed like it was nothing to do with how complex the child blueprints were, but the how many child actor components there was.

I was able to dramatically improve the lag by hiding components from the level instance
that didn’t need to be visible using EditDefaultsOnly, as well as closing their drop down details using the AdvancedDisplay specifier. You can reduce some components even further by hiding them completely from blueprint if they are native only components/variables

UPROPERTY(EditDefaultsOnly, AdvancedDisplay, BlueprintReadOnly, Category = “Components”)

1 Like

Thank you. Your solution worked perfectly and achieved exactly what I was aiming for.