This topic is related to the new Compilation Manager that arrived with 4.17. Since it’s a new feature, it expected to have bugs and what. I already have an aswerhub post about it but I thought it’s okay to post my thoughts / problems in here aswell. So let’s start.
It definitely reduces the launch-compile time. This is a great addition for big projects.
Child Blueprints are not compiled meaninglessly when a Parent Blueprint has changes. Again great for big-parent blueprints that holds all the data, compiling them are much faster.
Many bugs are fixed related to false cast errors and whatnot.
When a Parent BP and a Child BP got edits and needs to be compiled, just compiling Parent BP is no longer enough. We have to open and compile all edited blueprints now. Back then “File” - >“Refresh All Nodes” would make a compile on both Parent and Child Blueprints. It would be great if this new Manager could check if a BP’s children needs to be compiled or not.
Engine crashes with an “Out of Memory” crash log if you edit a Struct that is used by many blueprints. Since editing a Struct marks all its BP users as “Needs to be Compiled” after making a change on it, Manager is unable to put BPs in order to compile and attempts to do it all at once. Currently I got 3+ BigParents, their children as 3+ SmallParents as their children and 30+ Child blueprints as those smallparents’ children. I got many structs that are used by ALL of these blueprints and they become marked for compile if I touch a struct and Unreal crashes while compiling.
Solution with Manager on: Go from smallest child BPs and compile them individually, then go to their parents to do the same, then to their parents. Doing it the other way around crashes the Engine.
Solution without Manager: From Project Settings, disable the manager, compile, then enable it back.
Very Bad Solution: Make the changes, close the Engine, save without compiling and let Launch-Compile do the compiling. This gives struct-variable errors across the project so I wouldn’t suggest doing this.
That’s all for now! Thanks for your time and reading!
I’d really like to get a copy of your project in order to investigate the crashes you’ve found. It would probably be easiest if you started an answerhub thread - but you can also message me a link here if that works for you!
I’ll investigate the differences in struct editing that you mentioned.
I am guessing a little bit here, but the cause of your performance regression should be fixed in 4.18. The old compiler would try to skip unneeded dependency compilation and in 4.17 the compilation manager would not. In 4.18 there’s a filter pass in the compilation manager that removes recompilation of dependencies if a blueprints public interface was not changed since the last compile.
Internally, even when we recompiled all dependencies, we saw big performance wins, but that result was not as universal as I thought.
I thought I would note that I get unusually long compile times in my project when compiling my CharacterBP in 4.18.1. After adding only a handful of features it’s taking several (3-5) seconds to compile. Seems not normal as I have had several projects with much more complex BP that compile much faster.
Thought it worth mentioning that I found the compiling manager to be incredibly powerful until I tried to play multiplayer. Client joining the server in Play in New Window crashes the whole editor to desktop.
Not sure I have any way of pinpointing the problem - I am using various shared structs and parent/child actors - but just my two cents that this is an awesome tool and looking forward to checking it out again in the future!